Массив 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();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.636 из 5