web-dev-qa-db-fra.com

Java - définir l'opacité dans JPanel

Disons que je veux rendre visible l'opacité d'un JPanel% 20? Je ne veux pas dire setOpaque (dessiner ou ne pas dessiner) ou setVisible (afficher ou masquer) ... Je veux dire le rendre transparent JPanel .. vous savez?

Est-ce possible?

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

Vous devriez également regarder Arrière-plans avec transparence pour comprendre tout problème de peinture que vous pourriez avoir lorsque vous l'utilisez.

22
camickr

Utilisez l'attribut alpha pour la couleur.

Par exemple:

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

Va créer une couleur noire, avec 64 d'alpha (transparence)

Il en résulte:

sample

Voici le code

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 );
    }
}

Sans cela, cela ressemble à ceci:

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

alt text

13
OscarRyz
AWTUtilities.setWindowOpacity(aWindow, aFloat);

Où aWindow est le composant Swing et aFloat est l'opacité.

3
Mike

Cela ne fonctionne pas si bien sur Windows 7.

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

le canal alpha éclaircit juste la couleur.

lorsqu'un élément est mis à jour sur une couleur avec un canal alpha, l'ordinateur devient confus et réinitialise l'arrière-plan de l'élément mis à jour sans alpha. je vais essayer

AWTUtilities.setWindowOpacity(aWindow, aFloat);

suivant.

1
Jonny Santy

Si vous avez un panneau personnalisé et que le tout est semi-transparent, je vous conseille de remplacer sa méthode paintComponent comme ceci:

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

Que diriez-vous de remplacer la méthode paintComponent du JPanel (pour ce faire, vous devez sous-classer le JPanel lui-même et implémenter votre propre méthode paintComponent) à l'intérieur du paintComponent, vous pouvez récupérer une image tamponnée du composant, à partir de là, vous pouvez manipuler l'alpha de l'image en mémoire tampon et peignez-la sur le JPanel. J'ai rouge il y a longtemps. Toujours à la recherche du code.

0
djakapm