Problème de dessins de boutons
Bonjour,
Mon problème est simple et tordu. Je redéfinis la méthode paintComponent d'un JButton mais je ne redéfinis pas tout l'intérieur du bouton:
J'ai une petite appli qui au final doit disposer d'un fond personnalisable (dans l'exemple bleu uni, dans l'absolu, une photo ou une texture) et sur laquelle se trouve des boutons qui ont une image en leur centre (dans l'exemple, un carré rouge).
J'ai un problème avec le dessin des boutons. Je ne dessine pas sur tout la surface des boutons mais juste là ou j'ai besoin d'afficher une image pour avoir une "transparence". Le centre possède l'image, je peux par exemple entourer cette image de plusieurs couleurs différentes pour mettre en valeur le bouton, et sinon la marge reste non peinte.
Maintenant y a visiblement des problèmes de dessins, et je ne vois pas d'où ca vient. Lorsqu'on survole le bouton, son "image" est corrompue par le contenu d'un autre panel, ici le bloc rouge au dessus. Dans mon cas, c'est plus exactement la barre de menu par exemple.
http://guipom.free.fr/public/bouton1.jpg
après survol des boutons:
http://guipom.free.fr/public/bouton2.jpg
Je vous mets donc à disposition une classe rudimentaire, très moche au niveau de code, mais qui illustre le problème:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JFrame{
public Test() {
super("test");
this.setLayout(new BorderLayout());
JPanel panel = new JPanel() {
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, 1600, 1200);
}
};
add(panel);
JPanel panelbis = new JPanel() {
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 0, 1600, 1200);
}
};
add(panelbis,BorderLayout.NORTH);
setPreferredSize(new Dimension(640,480));
panel.setLayout(new FlowLayout());
JButton button1 = new JButton("toto") {
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(10, 10, 50, 60);
}
};
button1.setPreferredSize(new Dimension(70,80));
button1.setFocusable(false);
button1.setBorderPainted(false);
panel.add(button1);
JButton button2 = new JButton("toto") {
public void paintComponent(Graphics g) {
g.setColor(Color.YELLOW);
g.fillRect(10, 10, 50, 60);
}
};
button2.setPreferredSize(new Dimension(70,80));
button2.setFocusable(false);
button2.setBorderPainted(false);
panel.add(button2);
pack();
}
/**
* @param args
*/
public static void main(String[] args) {
(new Test()).setVisible(true);
}
} |
Merci d'avance si vous etes en mesure de me dépanner ;)
edit: désolé pas dans la sous catégorie, j'ai mis un tag en attendant
Réinitialiser le reste du bouton
Le problème est que tu ne réinitialise pas le reste de ton bouton alorsque la méthode paintComponent est appelée.
Avant de réinitiliser ex :
g.setColor(Color.RED);
g.fillRect(0, 0, 1600, 1200);
fait un this.repaint(); afin de réinitialiser tout le bouton.