您好我刚刚使用数组,我在3 x 3网格中创建2D数组时遇到的问题很少。
以下是我使用9个按钮创建的1D arrray的示例,它正常工作,因为它显示了所有9个按钮。
frame.setLayout(new GridLayout(3,3));
JButton[] buttons = new JButton[9];
for (int i = 0; i < buttons.length; i++){
buttons[i] = new JButton();
frame.add(buttons[i]);
buttons[i].setText(".");
但是,当我尝试使用2D数组时,只显示12个按钮中的6个。
frame.setLayout(new GridLayout(3,3));
JButton[][] buttons = new JButton[3][3];
for (int i = 0; i < buttons.length; i++){
for (int j = 0; j < buttons.length; j++){
buttons[i][j] = new JButton();
frame.add(buttons[i][j]);
buttons[i][j].setText(".");
}
}
另外,我还有一个问题,要调用每个按钮,我需要这样做吗?
button[0].setText("button 1");
也可以为每个按钮指定一个名称,例如代替按钮[0],是否可以使用button1,依此类推。
感谢。
答案 0 :(得分:6)
您的第二个for
循环有for (int j = 0; j < buttons.length; i++)
...它应该是j++
,而不是i++
。
另外,就像turbo指出的那样,3x3网格不足以容纳12个按钮(我假设你的意思是4x3或3x4?)。另外,不要将i
和j
都与buttons.length进行比较,而应该有两个单独的变量来比较每个变量(buttonsWidth,buttonsLength; buttonsX,buttonsY等)。
答案 1 :(得分:3)
你有一个错误:
for (int j = 0; j < buttons.length; i++){
应该是:
for (int j = 0; j < buttons.length; j++){
对于您的其他问题:
是的,您需要为每个按钮调用button[...].setText("...");
以指定其名称。 (您可以合并循环索引以自动执行此操作)。
也可以为每个按钮指定一个名称,例如代替按钮[0],是否可以使用button1,依此类推。
这就是为什么你创建了一个数组来避免处理多个对象button1,button2等。这是因为现在你可以循环处理它们了。
修改强> 你的数组init也有问题:
JButton [] buttons = new JButton [12];
这会创建一维数组。你想要的是:
JButton [] [] buttons = new JButton [3] [3]; // [3] [4]?
<强> EDIT2:强>
int number = 0;
for (int i = 0; i < buttons.length; i++){
for (int j = 0; j < buttons[0].length; j++){ //watch here for additional index [0] in length (it is size of "second dimension")
buttons[i][j] = new JButton();
frame.add(buttons[i][j]);
buttons[i][j].setText("Button" + number);
number++; //in separate line for clarity
}
}