Bonjour,
je débute dans le monde (merveilleux) du java "orienté objet" et j'ai un problème avec un petit programme, pas du tout ambitieux, et dont je ne trouve pas de solution après avoir consulté nombre de forums...
Je joins, plus bas, le code en espérant qu'une âme charitable voudra bien y jeter un œil...
J'explique mon problème : le programme est sensé afficher un carré bleu (paramétrable) quand on clique sur un bouton, et un carré rouge quand on clique sur un autre.
Le problème, c'est que le premier carré s'efface quand l'autre apparaît (et vice-versa) alors qu'il devrait rester en place ...
J'ai essayé d'enlever la ligne " super.paintComponent(); qui permet d'utiliser le constructeur par défaut de la classe mère de l'objet graphics (si j'ai bien compris), du coup les 2 carrés restent affichés, mais il y a des trucs très bizarre qui se produisent (3eme bouton qui apparaît n'importe où !! ).
Je pense que j'utilise mal la méthode repaint() sur l'objet graphics, ou bien c'est l'interface actionListener qui est mal redéfinie, je ne sais pas, j'ai tout essayé, rien n'y fait...
Voici le code :
Merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 import java.awt.*; import java.awt.event.*; import javax.swing.*; //********** Panneau contenant l'objet graphics ************* public class Panneau extends JPanel { private int posX; private int posY; private String couleur; public void paintComponent(Graphics g){ super.paintComponent(g); this.setBackground(Color.green); switch (couleur){ case "rouge": g.setColor(Color.RED); break; case "vert": g.setColor(Color.green); break; case "bleu": g.setColor(Color.blue); break; case "jaune": g.setColor(Color.yellow); break; case "orange": g.setColor(Color.orange); break; case "blanc": g.setColor(Color.white); break; } g.fillRect(posX, posY, 20, 20); // On dessine un carré } //---- méthode pour changer les coordonnées ---- public void setCoord(int X, int Y) { this.posX = X; this.posY = Y; //repaint(); } //---- méthode pour changer la couleur ---- public void setCoul(String coul) { this.couleur = coul; } } //************* Fenetre ***************************** public class Fenetre extends JFrame{ private JButton bouton1 = new JButton("b1"); private JButton bouton2 = new JButton("b2"); private Panneau pan = new Panneau(); //Constructeur de la classe fenetre public Fenetre(){ this.setTitle("Rubik"); this.setSize(500, 500); this.setLocationRelativeTo(null); this.setVisible(true); this.setAlwaysOnTop(true); //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setContentPane(pan); pan.add(bouton1); pan.add(bouton2); //On définit des Listener pour les 2 boutons bouton1.addActionListener(new Bouton1Listener()); bouton2.addActionListener(new Bouton2Listener()); } //Classe interne écoutant le premier bouton class Bouton1Listener implements ActionListener{ //Redéfinition de la méthode actionPerformed() public void actionPerformed(ActionEvent arg0) { pan.setCoord(100,100); pan.setCoul("bleu"); pan.repaint(); } } //Classe interne écoutant le 2eme bouton class Bouton2Listener implements ActionListener{ //Redéfinition de la méthode actionPerformed() public void actionPerformed(ActionEvent arg0) { pan.setCoord(200,200); pan.setCoul("rouge"); pan.repaint(); } } } void main(){ Fenetre fen = new Fenetre(); }
Partager