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