Как JButton должен отслеживать свою позицию в GridLayout?

1

У меня есть класс под названием cell, который расширяет JButton. Тогда у меня есть 16 Jbuttons в gridlayout (4,4,3,3). Возможно ли, чтобы каждая ячейка отслеживала свое положение в gridlayout (мне нужно будет знать, находится ли один щелчок JButton рядом с другим конкретным JButton).

  • 0
    Что это за кнопки? Это кнопки на основе массива? Потому что вы можете рассчитать положение кнопки в макете сетки на основе позиции массива кнопки. Или вы можете создать пользовательские JButton-ы, чтобы они сохраняли положение внутри них, если 16 кнопок отсутствуют в каком-либо массиве.
  • 0
    Я сделал это, я сохранил их в списке, но проблема, (это кнопки и gridlaoyout - игра-головоломка с слайдами), я не могу переместить кнопку влево вниз после того, как она была перемещена в первый раз, так что я бы попробовал другой путь, где каждая кнопка отслеживает свою позицию
Теги:
swing
jbutton
grid-layout

2 ответа

2
Лучший ответ

Вы можете просто создать класс, расширяющий 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);
    }
}
  • 0
    Как мне назначить их gridx и положение gridy из основного класса, который создает gridlayout?
  • 0
    Я отредактировал свой ответ, чтобы показать вам, как.
Показать ещё 1 комментарий
1

Я сохранил их в списке, но проблема, (эти кнопки и gridlaoyout - игра-головоломка с слайдом), я не могу переместить кнопку влево внизу после ее перемещения в первый раз, так что я бы попробовал другой способ, где каждая кнопка следить за своим положением

  • использовать putClientProperty

  • значок изменения для JButton из добавленного ActionListener

  • Я бы использовал JToggleButton с ItemListener для игры-головоломки

  • 0
    @ user3079108: См. также этот связанный пример .
  • 0
    Спасибо, ребята, за вашу помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню