В вашей текущей реализации clicked
- это поле экземпляра родительского класса, которое используют все ваши кнопки / ActionListener
s.
Вместо этого вам необходимо изолировать свойство, чтобы его можно было лучше связать с одной кнопкой.
Теперь вы можете создать пользовательский класс, который extends
из JButton
, но, ИМХО, это немного неуклюже и запирает вас в одном случае использования. Лично я хотел бы реализовать конкретную реализацию ActionListener
для обеспечения этого побочного эффекта.
Например ...
public class CounterActionListener implements ActionListener {
private int counter;
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JButton) {
JButton button = (JButton)source;
clicked++;
if(clicked == 0) {
button.setBackground(Color.red);
} else if(clicked == 1){
button.setBackground(Color.blue);
}
}
}
}
Затем в своем коде вы просто применяете слушателя к кнопке, например ...
grid[x][y] = new JButton(new CounterActionListener());
Вы могли бы также следовать этому, используя «делегат», который фактически выполнял требуемые операции, основываясь на количестве нажатий, которые можно удерживать в модели, но это выходит за рамки вопроса;)