2010-08-25 57 views
14

Digamos que quiero hacer visible la opacidad de un JPanel% 20? No me refiero a setOpaque (dibujar o no dibujar) o setVisible (mostrar u ocultar) ... Quiero decir que sea transparente JPanel ... ¿sabes?Java - establecer la opacidad en JPanel

¿Esto es posible?

+0

Su pregunta actual está redactado mejor, pero le ha pedido una pregunta muy similar en el pasado en la que incluso aceptó una respuesta (como referencia): http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane – Serplat

+0

Sí, eso no funcionó para mí. :( – nn2

+2

yo ayudaría si se le explica lo que no funcionó. – trashgod

Respuesta

20
panel.setBackground(new Color(r, g, b, a)); 

Usted también debe mirar a Backgrounds With Transparency entender cualquier problema que pueda tener pintura cuando se utiliza este.

+4

la "a" es la configuración alfa que es una opacidad. –

+0

Correcto, también puede leer la API de la clase Color para obtener una descripción completa de los parámetros del método. – camickr

+0

Gracias. Quiero decir que lo siento. Debería haber sido más claro. – nn2

3
AWTUtilities.setWindowOpacity(aWindow, aFloat); 

Donde aWindow es el componente Swing, y aFloat es la opacidad.

+3

Lo siento, no lo sigo.No quiero opacidad de ventana, pero opacidad JPanel. : D – nn2

+0

Uso JFrame y funciona bien. AWTUtilities.setWindowOpacity (frame, (float) 0.7); – janetsmith

+0

Bien, pero ¿cómo hacer eso con un JPanel conteniendo una imagen de fondo (para ver a través de la imagen)? – Benj

0

Cómo sobreescribir el método paintComponent de JPanel (para hacer esto tienes que subclasificar el propio JPanel e implementar tu propio método paintComponent) dentro del paintComponent puedes recuperar una imagen almacenada en el buffer del componente, desde ahí puede manipular el alfa de la imagen almacenada en el búfer y volver a pintarla en el JPanel. Tengo rojo hace mucho tiempo. Todavía estoy buscando el código.

13

Utilice el atributo alfa para el color.

Por ejemplo:

panel.setBackground(new Color(0,0,0,64)); 

creará un color negro, con el 64 de la alfa (transparencia)

Resultando en esto:

sample

Aquí está el código

package test; 

import javax.swing.*; 
import java.awt.Color; 
import java.awt.BorderLayout; 

public class See { 
    public static void main(String [] args){ 
     JFrame frame = new JFrame(); 
     frame.setBackground(Color.orange); 


     frame.add(new JPanel(){{ 
         add(new JLabel("Center")); 
         setBackground(new Color(0,0,0,64)); 
        }} , BorderLayout.CENTER); 
     frame.add(new JLabel("North"), BorderLayout.NORTH); 
     frame.add(new JLabel("South"), BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

sin ella que se parece a esto:

setBackground(new Color(0,0,0) ); // or setBackground(Color.black); 

alt text

+0

¡Muy bien, funcionó bien! – nn2

+0

Estoy contento, ¿has probado esto en Windows? – OscarRyz

+0

¿es posible con imágenes también? –

0

No funciona tan bien en las ventanas 7.

panel.setBackground(new Color(r, g, b, a)); 

el canal alfa simplemente aclara el color.

Cuando un elemento se actualiza en un color con un canal alfa, la computadora se confunde y restablece el fondo del elemento actualizado sin un alfa. Voy a intentar

AWTUtilities.setWindowOpacity(aWindow, aFloat); 

siguiente.

0

Si usted tiene un panel personalizado y quieres que todo lo que hay que ser semi-transparente, yo le aconsejo que hacer anular su método paintComponent así:

@Override 
    protected void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 
     Graphics2D g2d = (Graphics2D) graphics; 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); 
    } 
Cuestiones relacionadas