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:
Enregistrer un commentaire