Mon programme boucle sur une liste de JButton. Il repeint chaque bouton toutes les secondes
Le problème n'apparaitra peut-être pas en exécutant cette exemple, car les repaint() fonctionnent bien sur les petits programmes. Mon problème se vérifie quand la machine rame
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 @Override public class a { static JFrame frame = new JFrame(); static Set<JButton> components = new HashSet<JButton>(); public static void main(String[] args) { JPanel lPanel = new JPanel(); for (int i = 0; i < 15; i++) { JButton lButton = new JButton("Hello" + i); lPanel.add(lButton); components.add(lButton); } frame.add(lPanel); frame.pack(); frame.setVisible(true); blinking(); } public static void blinking() { Timer blinkTimer = new Timer(1000, new ActionListener() { boolean on = false; public void actionPerformed(ActionEvent e) { for (JButton lButton : components) { // blink the buttons background on and off lButton.setBackground(on ? Color.DARK_GRAY : Color.LIGHT_GRAY); lButton.setForeground(on ? Color.WHITE : Color.BLACK); } on = !on; } }); blinkTimer.start(); } }
Je voudrais que la couleur background et forground de chaque bouton soit mise à jour en même temps.
JButton hérite de JComponent, et JComponent.setBackground() appelle repaint(), même chose pour JComponent.setForeground.
Par conséquent, chaque seconde, mon programme appelle repaint() deux fois pour chaque bouton, et les couleurs ne sont pas toujours mises à jour en même temps.
Comment puis-je faire en sorte que toutes les couleurs soient mises à jour en même temps ?
Merci de votre aide
Partager