Массив JButton и ActionListener - Java
Формулировка задачи:
Доброго времени суток! Возникла вот такая проблема я создаю окно и создаю класс в котором есть кнопка и координаты Y и X. Потом создаю 2-й массив который заполняю объектами класса JButtonYX и как бы присваиваю для каждой кнопки координаты в соответствии с индексацией массива. И это все цепляю на наше окно.
Так вот, подскажите сделать так что бы при нажатии любой кнопки она с консоль писала свои координаты.
Я не могу разобраться как надо реализовать ActionListerner что бы он смог считывать Х и Y с объекта класса JButtonYX.
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
class JButtonYX {// класс в котором как я предпологаю можно привязать координаты к кнопкам
JButton b;
int y;
int x;
public JButtonYX() {
}
JButtonYX(JButton b1, int y1,int x1) {
this.b=b1;
this.y=y1;
this.x=x1;
}
}
class LayoutForBuutons {// класс в котором заплняется наше окно кнопками
//нужно сюда добавить метод который будет при нажатии на кнопку писать в консоль координаты X Y объекта JButtonYX
ArrayList<ArrayList<JButtonYX>> buttons = new ArrayList<ArrayList<JButtonYX>>();
JFrame frame = new JFrame();
public LayoutForBuutons() {
frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(10,10));
addButton();
frame.setVisible(true);
}
ArrayList<ArrayList<JButtonYX>> addButton() {
for (int i = 0; i < 10; i++) {
buttons.add(new ArrayList<JButtonYX>());
for (int j = 0; j < 10; j++) {
buttons.get(i).add(new JButtonYX(new JButton(), i, j));
buttons.get(i).get(j).y=i;// присваивает значение y к объекту класса JButtonYX
buttons.get(i).get(j).x=j;// Присваивает x
frame.add(buttons.get(i).get(j).b);// добовляет кнопку на наше окошко
}
}
return buttons;
}
}
public class ActionHelp {
public static void main(String[] args) {
LayoutForBuutons l = new LayoutForBuutons();
}
}Решение задачи: «Массив JButton и ActionListener»
textual
Листинг программы
package actionhelp;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
class JButtonYX extends JButton {// класс в котором как я предпологаю можно привязать координаты к кнопкам
int x, y;
JButtonYX(int x,int y) {
super();
this.y = y;
this.x = x;
}
}
class LayoutForBuutons {// класс в котором заплняется наше окно кнопками
//нужно сюда добавить метод который будет при нажатии на кнопку писать в консоль координаты X Y объекта JButtonYX
ArrayList<JButtonYX> buttons = new ArrayList<>();
JFrame frame = new JFrame();
public LayoutForBuutons() {
frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(10,10));
this.addButton();
frame.setVisible(true);
}
void addButton() {
for (int i = 0; i < 10; i++) {
for (int j = i * 10; j < (i + 1) * 10; j++) {
this.buttons.add(new JButtonYX(j % 10, i));
this.frame.add(this.buttons.get(j));
this.buttons.get(j).addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButtonYX b = (JButtonYX) e.getSource(); //берем объект, на котором произошло событие
System.out.println(b.x + " " + b.y);
}
});
}
}
}
}
public class ActionHelp {
public static void main(String[] args) {
LayoutForBuutons l = new LayoutForBuutons();
}
}