2012-05-04 13 views
0

これは私の最初の投稿です。ボタンを押すたびにArrayList <Number>に値を追加する

私は、[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());  
} 
} 

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

セブ

+0

投稿を正しくフォーマットするには、有効なコード –

+0

tnxを送信してください。 – TriRook

答えて

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 
    ... 

}

+0

返信用のtnx ...私は何を意味するのか見ています...しかし、私はボタンをクリックしてArrayListをチェックアウトすると、コンソールの "null"しか得られないようなコードを置く場合.... hmmmm。 ...私は、つまり、私はアクセサメソッドの前にリストの値を設定するsetListを作成する必要がありますか? – TriRook

+0

@Sebいいえ、既にあなたの 'Board'コンストラクタにリストのインスタンスを作成しました。 100個のボタンすべてがコンストラクタの3番目のパラメータとしてこのリストを取得し、 'Position'も最後のコンストラクタパラメータと同じインスタンスを取得する必要があります。 – dasblinkenlight

+0

コンストラクタの 'ButtonEventHandler'と' Position'と、 'Board'クラスのインスタンス化では、' Position'に 'list'という3番目のパラメータがあります。私はこの' private ArrayList _list; private ButtonEventHandler beh = new ButtonEventHandler(_row1、_col1、_list); '...そうでしょうか? – TriRook

0

[OK]を、私はそれが:)

を仕事をしていた提案として私は、コンストラクタを変更位置クラスで私は

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

このように私はもうメソッドをボードクラスにはもう必要としませんでした!

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

関連する問題