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 知道)但这不会更新实际 GUI 中的文本。aaaaaahhh 学期末编码不好玩 请帮助任何人

4

2 回答 2

2

重复一遍,如果你有一个 JButton 网格,为什么每次都重新创建它们?为什么不简单地遍历网格中已经存在的组件并更新它们的状态,比如可能显示在 JButtons 上的文本?

  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 回答