java 嵌套 for() 循环抛出 ArrayIndexOutOfBoundsException

标签 java exception jpanel

我正在完成一本 Java 书中的 JPanel 练习。我的任务是使用 GridLayout 创建 5x4 网格。

当我循环容器以添加面板和按钮时,第一个 add() 抛出 OOB 异常。我做错了什么?

package mineField;

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")

public class MineField extends JFrame {

private final int WIDTH = 250;
private final int HEIGHT = 120;
private final int MAX_ROWS = 5; 
private final int MAX_COLUMNS = 4;

public MineField() {

    super("Minefield");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Container mineFieldGrid = getContentPane();
    mineFieldGrid.setLayout(new GridLayout(MAX_ROWS, MAX_COLUMNS));

    // loop through arrays, add panels, then add buttons to panels.
    for (int i = 0; i < MAX_ROWS; i++) {
        JPanel[] rows = new JPanel[i];

        mineFieldGrid.add(rows[i], rows[i].getName());
        rows[i].setBackground(Color.blue);

        for (int j = 0; j < MAX_COLUMNS; j++) {
            JButton[] buttons = new JButton[i];             
            rows[i].add(buttons[j], buttons[j].getName());
        }
    }

    mineFieldGrid.setSize(WIDTH, HEIGHT);
    mineFieldGrid.setVisible(true);

}

public int setRandomBomb(Container con)
{

    int bombID;

    bombID = (int) (Math.random() * con.getComponentCount());
    return bombID;


}
/**
 * @param args
 */
public static void main(String[] args) {

    //int randomBomb;
    //JButton bombLocation;

    MineField minePanel = new MineField();
    //minePanel[randomBomb] = minePanel.setRandomBomb(minePanel);

}

}

我确信我过度设计了一个简单的嵌套 for 循环。由于我是 Java 新手,请多多指教。我相信有一天我会报答你的恩情。

最佳答案

JPanel[] rows = new JPanel[i];

i 在第一次迭代中为 0,这不是您想要的。做到这一点:

JPanel[] rows = new JPanel[MAX_ROWS];

此外,我认为您希望将其完全放在 for 循环之外,因为您似乎正在使用它的元素,而这些元素将是未初始化的......

这也是错误的:

JButton[] 按钮 = new JButton[i];

例如,当 j 为 2 时,

i 可以为 0,在这种情况下,不存在 buttons[j] 这样的东西。将它们全部设置为 MAX_* ,我认为您希望将它们从循环中取出,因为我不认为在每次迭代时重新创建它们有什么意义。此外,您还需要实例化各个数组元素。

关于java 嵌套 for() 循环抛出 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813857/

相关文章:

java - JSch 没有检测到 $HOME/.ssh/id_rsa 公钥

具有多个 OUT 参数的 Java 存储过程批处理

java - 从生物识别指纹考勤设备中检索数据

java - 使添加的 JPanel 在父 JPanel 中可见

java - 一个Synchronized Collection Wrapper工厂方法是如何将 "own"对象传入其中的呢?

java - 登录在我的 servlet 程序中不起作用

c# - 是否有预定义的 ThisIsABugException?

java - 当我尝试连接到 Mysql 时检测到 JSONException 时,如何修复错误?

java - boolean 值 - 它应该停止时却没有停止(JAVA)

java - 将 JLabel 添加到面板 - 如何正确布局组件?