Во-первых, я предлагаю вам использовать наследование
public class GridButton extends JButton {
int x, y;
// String state; // probably put this here instead
public GridButton(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
Тогда вам понадобится список больше, чем массив, потому что массивы имеют фиксированный размер, и вы сможете нажимать столько раз, сколько хотите
List<int[]> list = new ArrayList<>();
С указанным выше классом при нажатии вместо проверки всей сетки вы получаете немедленный доступ к позициям
Сначала используйте класс, поэтому замените
final JButton nb = new JButton();
с
final JButton nb = new GridButton(x, y);
И в слушателе действий, получить доступ к значениям, а также добавить в список
@Override
public void actionPerformed(ActionEvent e) {
GridButton source = (GridButton) e.getSource();
list.add(new int[] {source.x, source.y});
}
изменение координат, хранящихся внутри, при каждом нажатии JButton
Я не уверен, почему вы это сделаете, но вам придется изменить как саму кнопку с помощью методов установки этого класса, так и заменить / сбросить массив кнопок с новым позиционированием