Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中更新已有数据的容器_Java_User Interface_Button_Containers_Grid Layout - Fatal编程技术网

如何在java中更新已有数据的容器

如何在java中更新已有数据的容器,java,user-interface,button,containers,grid-layout,Java,User Interface,Button,Containers,Grid Layout,大家好,我需要为我正在创建的一个数独游戏更新容器数据,但我正在努力让字段用新数据更新。容器使用网格布局,每个单元格包含一个按钮,其中包含适当的数独数字,我需要知道如何更新这些按钮中的文本。我将非常感谢您对我的帮助,无论是我可以使用什么方法,还是一般的帮助。请看下面的代码,我现在必须尝试和更新,我知道它可能很混乱,完全走错了方向,但我只是想搞乱一些东西,希望它能工作 public void update(int[][] grid2)throws NullPointerException{ myGr

大家好,我需要为我正在创建的一个数独游戏更新容器数据,但我正在努力让字段用新数据更新。容器使用网格布局,每个单元格包含一个按钮,其中包含适当的数独数字,我需要知道如何更新这些按钮中的文本。我将非常感谢您对我的帮助,无论是我可以使用什么方法,还是一般的帮助。请看下面的代码,我现在必须尝试和更新,我知道它可能很混乱,完全走错了方向,但我只是想搞乱一些东西,希望它能工作

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();
}
public void update(int[][]grid2)引发NullPointerException{
myGrid=新容器();
试一试{

对于(int i=0;i您的更新方法是在每次调用它时创建新的Swing组件,如果您只需要更新文本,这是不必要的。要直接更新任何
JButton
中的文本,您可以创建如下按钮数组:

JButton[][]  buttons = new JButton[9][9];
然后像这样创建(只调用一次):


要重新迭代,如果您有一个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);
    }
  }

用于(int i=0,比在网格中添加新的JButks/组件更简单,为什么不简单地遍历已经在网格中的组件并更新它们的状态,比如通过改变JButtons上显示的文本?如果这无济于事,那么请考虑告诉我们更多关于您当前的程序。假设我们没有先验知识。正如@HovercraftFullOfEels所说的,另外:调用
repaint()
而不是
update()
,并且尽量不要将AWT组件与Swing组件混合使用(即偏爱
JPanel
(或类似)而不是
组件
。与我前面的代码类似,在程序中,我最初是这样添加按钮的,因此没有办法访问它们(据我所知),谢谢一旦我了解了它,我就设法修复了代码中的错误,现在一切正常。感谢您的帮助
buttons[row][column].setText("New Text");
  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);
    }
  }