【问题标题】:making 3 by 3, 2d array in java在java中制作3乘3,二维数组
【发布时间】:2014-02-24 16:36:00
【问题描述】:

您好,我只是在处理数组,在 3 x 3 网格中创建 2D 数组时遇到了一些问题。

下面是我用 9 个按钮创建的一维数组的示例,它在 atm 上运行良好,因为它显示了所有 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],是否可以有按钮1,等等。

谢谢。

【问题讨论】:

  • 看看循环。两者都有i++
  • 如果你想让组件有一个名字,使用setName..setText是按钮中显示的文字
  • 另外请记住,3x3 2D 阵列不足以容纳 12 个按钮。
  • 如果您使用 setName,您可以使用 getName 来获取按钮名称。您仍然必须从数组中引用它们。或者,您可以将按钮声明为JButton button0 = new Button(),然后将其作为buttons[0]=button0 添加到您的数组中。然后你有一个可以使用的单独引用,但你需要单独声明它们。
  • 如果你不使用数组......但你可以区分一个按钮,例如你有buttons[0][0].getName().equals("button1")然后你知道按钮是什么,如果你不想这样做你仍然可以将您的按钮而不是数组存储在Map&lt;String,JButton&gt;

标签: java arrays swing


【解决方案1】:

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

另外,就像 turbo 指出的那样,3x3 网格不足以容纳 12 个按钮(我假设您的意思是 4x3 或 3x4?)。此外,不要将ij 与buttons.length 进行比较,您可能应该有两个单独的变量来比较每个变量(buttonsWidth、buttonsLength;buttonsX、buttonY 等)。

【讨论】:

  • 是的,很抱歉 3 by 3 只能容纳 9 个按钮,谢谢。
【解决方案2】:

你这里有一个错误:

for (int j = 0; j < buttons.length; i++){

应该是:

for (int j = 0; j < buttons.length; j++){

关于您的其他问题:

是的,您需要为每个按钮调用button[...].setText("..."); 来分配它的名称。 (您可以合并循环索引来自动执行此操作)。

是否可以给每个按钮一个名称,例如代替按钮[0],是否可以有按钮1,等等。

这就是为什么您创建了一个数组来避免处理多个对象 button1、button2 等。这是因为现在您可以循环处理它们。

编辑: 你的数组初始化也有问题:

JButton[] 按钮 = 新 JButton[12];

这将创建一个一维数组。你想要的是这样的:

JButton[][] 按钮 = 新的 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
    }
}

【讨论】:

  • 您好,感谢您的回复。将 i++ 更改为 j++ 会在 3 x 3 网格中创建 36 个按钮。
  • 我已将数组的大小更改为 9 个按钮,现在可以正常工作了。
  • 但是你能告诉我如何给每个按钮一个名字,比如 button1 button2 button3 .... button9
  • 使用 button[0].setName("button0") - 类似于 setText()
  • 所以如果我使用 setName,我是否可以使用我给它们的名称来引用按钮,或者我需要从数组中调用它们,例如;按钮[0]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2015-07-12
  • 2015-06-10
  • 2020-11-25
相关资源
最近更新 更多