这是我在这里发表的第一篇文章,希望我能说得对!
我做了什么我创建了一个带有JButtons的NxN板,指示从[0,0]到[9,9]的坐标。 每次单击一个按钮时,控制台会显示坐标,我尝试做的是将这些坐标保存在一个ArrayList中,按下另一个窗口中的第二个按钮即可显示...没有什么花哨的,对不起,只是绕着我的头基本概念......
问题是我无法将值保存到ArrayList中,一旦按下第二个按钮,我就无法调用它... 附上我的课程代码......每个代码都在不同的文件中。
Board.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();
}}
ButtonEventHandler.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;
}}
Position.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());
}
}
非常感谢你的帮助!!
的Seb
答案 0 :(得分: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
...
}
答案 1 :(得分:0)
我按照建议更改了构造函数,在位置类中我删除了
private ButtonEventHandler beh = new ButtonEventHandler(_row1, _col1, _list);
并将ActionPerformed更改为:
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(beh.getList()); //previous code, changed with the one below
System.out.println(_list);
}
通过这种方式我不再需要 Board 类中的getList
方法了!
感谢您的帮助!!