Op Monday 2 Feb 2015 13:24 CET schreef Cecil Westerhof:
I defined the following class:
private enum Colours {
Blue(Color.BLUE),
Red(Color.RED),
Orange(Color.ORANGE),
Yellow(Color.YELLOW),
Green(Color.GREEN),
Cyan(Color.CYAN),
Magenta(Color.MAGENTA),
Brown(new Color(0x9C, 0x5D, 0x52)),
;
private final Color value;
Colours(Color value) {
this.value = value;
}
public Color value() {
return value;
}
}
I use it to add some (Swing) buttons:
for(int i = 0; i < Colours.values().length; ++i) {
final Colours colour = Colours.values()[i];
JButton jButton = new JButton("" + colour);
add(jButton, gbc);
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkColour(colour);
}
});
gbc.gridx++;
if( gbc.gridx == 3 ) {
gbc.gridy++;
gbc.gridx = 0;
}
}
Those buttons are used to select a colour. But when the wrong colour
is selected I want to disable all the buttons for half a second.
(Otherwise people could just click very fast at random.)
How would I do this?
I hoped that there was a 'smart' way, but probably not. So I
implemented it in the 'dumb' way.
I created a variable to hold them all:
private JButton colourButtons[] = new JButton[Colours.values().length];
I changed the generating into:
for(int i = 0; i < Colours.values().length; ++i) {
final Colours colour = Colours.values()[i];
JButton jButton = new JButton("" + colour);
colourButtons[i] = jButton;
add(jButton, gbc);
The above add() saves the buttons, so now you are saving them in two places.
Presumably "this" is some kind of JPanel. The buttons you added are available by calling this.getComponents()