Моя программа зацикливается на списке JButton. Для каждого JButton он перерисовывает его каждую секунду:
public class a {
static JFrame frame = new JFrame();
static Set<MyButton> components = new HashSet<MyButton>();
public static void main(String[] args) {
JPanel lPanel = new JPanel(new GridLayout(0,18));
for (int i = 0; i < 500; i++) {
MyButton lButton = new MyButton("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(500, new ActionListener() {
boolean on = false;
public void actionPerformed(ActionEvent e) {
for (MyButton lButton : components) {
lButton.blink(on);
}
on = !on;
}
});
blinkTimer.start();
}
}
public class MyButton extends JButton {
public MyButton(String text) {
super(text);
}
public void blink(boolean on) {
setBackground(on ? Color.DARK_GRAY : Color.LIGHT_GRAY);
setForeground(on ? Color.WHITE : Color.BLACK);
}
}
Результат:
Я хочу убедиться, что все кнопки обновляют свой цвет фона и переднего плана в то же время.
JButton extends JComponent
и JComponent.setBackground
вызывает repaint()
, а также JComponent.setForeground
.
Поэтому каждую секунду моя программа вызывает repaint()
два раза для каждая кнопка и цвета не всегда обновляются одновременно.
Как я могу гарантировать, что цвета всех кнопок обновляются одновременно? Я думаю, что решение состоит в том, чтобы вызвать только один repaint()
, может быть, на контейнере кнопок, но как я могу это сделать?