在java中制作3乘3d数组

时间:2014-02-24 16:36:00

标签: java arrays swing

您好我刚刚使用数组,我在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,依此类推。

感谢。

2 个答案:

答案 0 :(得分:6)

您的第二个for循环有for (int j = 0; j < buttons.length; i++) ...它应该是j++,而不是i++

另外,就像turbo指出的那样,3x3网格不足以容纳12个按钮(我假设你的意思是4x3或3x4?)。另外,不要将ij都与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
    }
}