0

これはここでの私の最初の投稿です、私がそれを正しくすることを願っています!!

[0、0]から[9、9]までの座標を示すJButtonを使用してNxNボードを作成しました。ボタンがクリックされるたびに、コンソールに座標が表示されます。私がやろうとしたのは、別のウィンドウで2番目のボタンを押すと表示されるArrayListにそれらの座標を保存することです。基本概念...

問題は、ArrayListに保存する値を取得できず、2番目のボタンを押すとそれを思い出せないことです...クラスのコードを添付しました...それぞれが異なるファイルにあります。

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());      
}
}

助けてくれてありがとう!

セブ

4

2 に答える 2

1

コードの問題は、配列リストが 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
    ...

}

于 2012-05-04T02:52:19.347 に答える
0

わかりました、私はそれを働かせました:)

私は提案されたようにコンストラクタを変更しました.Positionクラスで私は取り除きました

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メソッドはもう必要ありません!

助けてくれてありがとう!!

于 2012-05-04T17:02:47.223 に答える