Comment repeindre un JComponent une seule fois après plusieurs repaint() ?
Mon programme boucle sur une liste de JButton. Il repeint chaque bouton toutes les secondes
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
| @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();
}
} |
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
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