GetSource? Как сохранить расположение кнопки в массиве? (Макет сетки) - PullRequest
0 голосов
/ 06 мая 2019

Я создал Gridlayout из кнопок с двумерным массивом.Когда я нажимаю кнопку, я хочу выполнить метод из другого класса, которому нужны координаты нажатой кнопки.Я хочу сохранить эти числа в массиве.

int buttonCoordinates[2]

Я уже создал actionlistener

jBTN_field[y][x].addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent pE) {

    }
}

Я хочу сохранить координаты в массиве.

1 Ответ

1 голос
/ 06 мая 2019

Не пытаясь изменить структуру вашей программы до сих пор, вот «наивный» подход.

Вместо использования Anonymous Inner Class , выможно создать другой класс:

public class MyListener implements ActionListener {

    private int x;
    private int y;

    public MyListener(int x, int y){
        this.x = x;
        this.y = y;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //do something with this.x
        //do something with this.y
    }
}

, а затем вы можете адаптировать его к своему коду:

jBTN_field[y][x].addActionListener(new MyListener(x, y));

Теперь для доступа к координате кнопки это будет так просто:

button[y][x].

ПРИМЕЧАНИЕ

Ваш код не является логически неправильным.Я просто показываю вам альтернативу, которая может упростить для вас вещи, чтобы вы могли решить свою проблему более методично.Пример, который я показал, подходит, если вы хотите иметь одинаковую функциональность actionPerformed() для всех кнопок.В противном случае анонимный внутренний класс более уместен.

В качестве альтернативы, если вы хотите сохранить свой код как есть, вы можете сделать:

jBTN_field[y][x].addActionListener(new ActionListener() {
    int x = "value_for_x", y = "value_for_y";

    @Override
    public void actionPerformed(ActionEvent pE) {
        //do something with x
        //do something with y
    }
}
...