有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在每次按下按钮时向ArrayList<Number>添加值

这是我在这里的第一篇文章,希望我能把它做好

我所做的是创建了一个NxN板,其中的JButtons表示从[0,0]到[9,9]的坐标。 每次单击按钮时,控制台都会显示坐标,我试图将这些坐标保存在ArrayList中,通过在另一个窗口中按第二个按钮来显示这些坐标。。。没什么特别的,抱歉,只是把我的脑袋绕在基本概念上

问题是我无法获取要保存到ArrayList中的值,并且一旦按下第二个按钮,我就无法调用它。。。 附上我的课程代码。。。每一个都在不同的文件中

板。java

public class Board{

public Board(){

    JFrame win = new JFrame ();
    GridLayout layout = new GridLayout(10, 10);
    win.setLayout(layout);
    for (int row1 = 0; row1 < 10 ; row1 = row1+1){
        for (int col1 = 0; col1 < 10; col1 = col1+1){
            JPanel jp = new JPanel();
            JButton jb = new JButton("[" + row1 + "," + col1 + "]");
            jb.addActionListener(new ButtonEventHandler(row1, col1));
            jp.add(jb);
            win.add(jp);
        }
        win.setVisible(true);
        win.pack();
}

    JFrame win2 = new JFrame("Stored values");
    win2.setVisible(true);
    JPanel jp2 = new JPanel();
    win2.add(jp2);
    JButton jb2 = new JButton("Check Log");
    jb2.addActionListener(new Position(win2, jb2));
    jp2.add(jb2);
    win2.pack();
}}

按钮手柄。java

public class ButtonEventHandler implements ActionListener {


private int _row1;
private int _col1;
private ArrayList<Number> _list;


public ButtonEventHandler(int row1, int col1){

    _row1 = row1;
    _col1 = col1;
    _list = new ArrayList<Number>();
}

@Override
public void actionPerformed(ActionEvent e) {
    System.out.println("Position: " + _row1 + ", " + _col1);
    _list.add(_row1);
    _list.add(_col1);
}

public ArrayList<Number> getList(){

    return _list;
}}

位置。java

public class Position implements ActionListener  {

private JFrame _win2;

private JButton _jb2;
private int _row1;
private int _col1;
private ArrayList<Number> _list;

private ButtonEventHandler beh = new ButtonEventHandler(_row1, _col1);


public Position(JFrame win2, JButton jb2){
    _win2 = win2;
    _jb2 = jb2;     
}

@Override
public void actionPerformed(ActionEvent e) {

    System.out.println(beh.getList());      
}
}

非常感谢你的帮助

赛博


共 (2) 个答案

  1. # 1 楼答案

    代码中的问题是没有一个数组列表:您有多个数组列表。每个按钮处理程序都有自己的

    您应该创建一个数组列表,并通过将其传递给所有处理程序的构造函数,在所有处理程序之间共享它

    public Position(JFrame win2, JButton jb2, AttayList<Number> list){
        _win2 = win2;
        _jb2 = jb2;
        _list = list;
    }
    
    public ButtonEventHandler(int row1, int col1, AttayList<Number> list) {
        _row1 = row1;
        _col1 = col1;
        _list = list;
    }
    
    public Board(){
        JFrame win = new JFrame ();
        GridLayout layout = new GridLayout(10, 10);
        win.setLayout(layout);
        ArrayList myList = new ArrayList<Number>();
        // In the code below, use myList as the last parameter to the constructors of ButtonEventHandler and Position
        ...
    

    }

  2. # 2 楼答案

    好的,我让它工作:)

    我按照建议更换了构造函数,在位置类中,我摆脱了

    private ButtonEventHandler beh = new ButtonEventHandler(_row1, _col1, _list);
    

    并将执行的操作更改为:

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(beh.getList()); //previous code, changed with the one below
        System.out.println(_list);
    }
    

    这样,我就不再需要Board类中的getList方法了

    谢谢你的帮助