jeudi 5 février 2015

Java - transparence sur les JPanels

Bonjour,

Certains étudiants de deuxième année ont attiré mon attention sur le fait que les panels dont la couleur avait un certain degré de transparence ( alpha ) ne s'affichaient pas bien. C'est particulièrement vrai pour les Panels qu'on dessine nous-mêmes ( dessin sur mesure ).

Pourquoi ?

Cela a rapport à l'opacité qui, par défaut, est complète sur les JPanels ( la propriété opaque est à true ) . Cela cause une contradiction avec une couleur de fond qui n'est pas totalement opaque.

Solution ?

1. La solution facile est d'assigner la couleur de fond à l'objet représentant la surface de dessin plutôt que dans la redéfinition de la méthode paintComponent  :

Ex.

SurfaceDessin sd;


// dans le constructeur du JFrame

...
sd = new SurfaceDessin();
sd.setBounds( 10,10,200,200 );
sd.setBackground ( new Color ( 23,56, 100, 80 );
getContentPane().add(sd);


2. Une solution plus permanente existe, mais elle est plus longue à réaliser. Elle consiste à placer la surface de dessin ( ou un autre JPanel ) complètement transparent ( setOpaque( false )) et de dessiner une grand rectangle occupant toute la surface du JPanel et d'appliquer la couleur ayant un degré de transparence à ce rectangle. Donc dans le paintComponent, ça donne :

protected void paintComponent ( Graphics g )
{

g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);


}

et dans le constructeur :

//ajouter la surface de dessin
sd = new SurfaceDessin();

sd.setBounds( 10, 140, 300, 200);
sd.setOpaque(false);
sd.setBackground( new Color(255, 0, 0, 20) );
getContentPane().add(sd);

Aucun commentaire: