如何更新已包含数据的java中的容器

时间:2012-10-26 00:00:28

标签: java user-interface button containers grid-layout

大家好我需要为我正在创建的数独游戏更新容器数据,但我正在努力使用新数据更新字段。容器使用网格布局,每个单元格包含一个具有相应数字的按钮数独,我需要知道如何更新这些按钮中的文本。任何帮助我可以使用什么方法或任何一般的帮助将不胜感激。请查看我目前必须尝试更新的代码,我知道它可能是凌乱的,完全在错误的轨道上,但我一直在试图弄乱那些希望它能起作用的东西。

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中。 aaaaahhh编码在学期结束时不好玩,请帮助任何人

2 个答案:

答案 0 :(得分:2)

要重新迭代,如果你有一个JButtons网格,为什么每次都重新创建它们?为什么不简单地遍历已经在网格中的组件并更新它们的状态,例如可能是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);
    }
  }

答案 1 :(得分:1)

您的更新方法是在每次调用时创建新的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");