У меня есть класс под названием cell, который расширяет JButton. Тогда у меня есть 16 Jbuttons в gridlayout (4,4,3,3). Возможно ли, чтобы каждая ячейка отслеживала свое положение в gridlayout (мне нужно будет знать, находится ли один щелчок JButton рядом с другим конкретным JButton).
Вы можете просто создать класс, расширяющий JButton
и добавив два поля для позиции в сетке. Создайте новый конструктор (или сеттеры), который присваивает значения этим полям, и два простых геттера, которые возвратят их.
Пример:
class MyJButton extends JButton {
private int gridx;
private int gridy;
public MyJButton(String label, int gridx, int gridy) {
super(label);
this.gridx = gridx;
this.gridy = gridy;
}
public int getGridx() {
return gridx;
}
public int getGridy() {
return gridy;
}
}
Вы можете назначить эти gridx
, gridy
значения при создании графического интерфейса. Например, следующее создает 16 кнопок, помеченных их позицией в сетке:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
MyJButton btn = new MyJButton(i + "," + j, i, j);
//Configure your button here...
panel.add(btn);
}
}
Я сохранил их в списке, но проблема, (эти кнопки и gridlaoyout - игра-головоломка с слайдом), я не могу переместить кнопку влево внизу после ее перемещения в первый раз, так что я бы попробовал другой способ, где каждая кнопка следить за своим положением
использовать putClientProperty
значок изменения для JButton из добавленного ActionListener
Я бы использовал JToggleButton
с ItemListener
для игры-головоломки