1

こんにちは、作成中の数独ゲームのコンテナー データを更新する必要がありますが、フィールドを新しいデータで更新するのに苦労しています。コンテナーはグリッド レイアウトを使用し、各セルには数独に適切な番号のボタンが含まれています。これらのボタンのテキストを更新する方法を知る必要があります。私が使用できる方法についての助け、または一般的な助けをいただければ幸いです。私が現在試して更新しなければならないコードを参照してください。おそらく面倒で完全に間違った方向に進んでいることはわかっていますが、うまくいくことを期待して何かをいじろうとしているだけです。

public void update(int[][] grid2)throws NullPointerException{
myGrid = new Container();
try{
  for(int i = 0; i<9; i++){
    for(int j = 0; j<9; j++){
      String appropriateNumber = convertSimple(grid2[i][j]);
      JButton button = new JButton(appropriateNumber);
      button.addActionListener(new sudokuListener());
      myGrid.add(button);
    }
  }
}
catch(NullPointerException e){

}
myGrid.setLayout(new GridLayout(9, 9));
myGrid.setPreferredSize (new Dimension(400, 400));

add(myGrid);
puzzleGUI.update();
}

puzzlGUI.update には、単純に puzzle.validate() が含まれています (パズルは GUI です)。

[編集] わかりました、少し変更し、JButton arrya を提案どおりに使用しました。この配列にボタンのテキストを設定できました (system.out.print でわかります)。実際の G​​UI にあるテキスト。aaaaahhhコーディングは学期の終わりには楽しくありません誰か助けてください

4

2 に答える 2

2

繰り返しますが、JButton のグリッドがある場合、なぜ毎回再作成するのでしょうか? JButton に表示されているテキストなど、既にグリッドにあるコンポーネントを単純に反復してその状態を更新しないのはなぜでしょうか?

  for(int i = 0; i<9; i++){
    for(int j = 0; j<9; j++){
      String appropriateNumber = convertSimple(grid2[i][j]);
      someButtonArray[i][j].setText(appropriateNumber);

      // no longer need this stuff
      // JButton button = new JButton(appropriateNumber);
      // button.addActionListener(new sudokuListener());
      // myGrid.add(button);
    }
  }
于 2012-10-26T00:18:08.853 に答える
1

あなたの update メソッドは、呼び出されるたびに新しい Swing コンポーネントを作成しています。これは、テキストを更新するだけであれば不要です。テキストを直接更新するには、JButton次のようにボタン配列を作成できます。

JButton[][]  buttons = new JButton[9][9];

次のように作成します(一度だけ呼び出されます):

for (int i = 0; i<9; i++) {
   for(int j = 0; j < 9; j++){
      String appropriateNumber = convertSimple(grid2[i][j]);
      button[i][j] = new JButton(appropriateNumber);
      button[i][j].addActionListener(new sudokuListener());
      myGrid.add(button[i][j]);
    }
}    

次に更新します:

buttons[row][column].setText("New Text");
于 2012-10-26T00:11:59.423 に答える