jimmypage64
Messages postés164Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention21 septembre 2010
-
17 mars 2009 à 13:54
benmor
Messages postés49Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention27 novembre 2011
-
17 mars 2009 à 20:06
Bonjour,
Je débute sur JAVA.
Je voudrais changer la transparence d'un JPanel sur le MouseEntered et MouseExited.
Voici le code de ma classe Case (extends JPanel)
...
public void mouseEntered(MouseEvent e) {
this.setBackground(new Color(255,0,0,80));
this.repaint();}
public void mouseExited(MouseEvent e) {
this.setBackground(new Color(0,0,255,20));
this.repaint();
}
...
Le problème est qu'au lieu de me changer le fond de ma case, j'ai l'impression qu'a chaque this.repaint que je fais, le setBackground me rajoute une couche en fond de mon composant.
Au final a force de rentrer et de sortir de ma Case, elle devient de plus en plus opaque et la couleur alterne entre le rouge et le violet...
Quelqu'un aurait-il une solution pour remedier à ce problème ?
PS: dans l'exemple le résultat attendu serait :
- lorsque la souris est hors de la case : fond bleu et transparent
- lorsque la souris est dans la case : fond rouge et un peu moins transparent.
benmor
Messages postés49Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention27 novembre 20119 17 mars 2009 à 20:06
Je pense pas que ce soit un bug jojolemariole.
Si tu fait un repaint sur le panel, alors seul celui-ci sera repaint, et donc la transparence se fait par rapport à ce qui existe déjà.
Si tu fait un repaint sur la fenêtre, alors il repaint d'abord ce qu'il y a sous le panel et ensuite la transparence se fait donc sur ce qu'il y a sous le panel.
Ca me paraît normal à moi.
"panel.getParent().repaint();
" ne fonctionne pas dans ton cas (j'ai testé) sans doute parce que tu utilise un BorderLayout et donc tout l'espace est utilisé donc (optimisation) seul panel est repaint. J'ai testé avec un FlowLayout, ça fonctionne.