所以基本上,我试图制作一个144个按钮(12x12)的网格,每行12行,每行12个按钮。
但是,当我尝试运行时,我收到此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at progrid.me.myname.grid.ProGrid.main(ProGrid.java:23)
以下是代码:
package progrid.me.myname.grid;
import javax.swing.*;
public class ProGrid extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public static void main(String[] arguments) {
JFrame frame = new JFrame(); //Create the frame
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("My ProGrid remake");
frame.setSize(300, 300);
JPanel[] row = new JPanel[12];
for(int i = 0; i < 12; i++){
frame.add(row[i]);
row[i].setBounds(0, i*25, 300, 25);
row[i].setVisible(true);
for(int j = 0; i < 12; i++){
JButton[] button = new JButton[j]; //Make 12 new JButtons (button[0] - button[12]) for each row
row[i].add(button[j]);
button[j].setBounds(i*25, 0, 25, 25);
button[j].setVisible(true);
}
}
}
}
第23行是:
frame.add(row[i]);
这可能意味着这也不起作用:
row[i].add(button[j]);
那么有人能给我一个正确的方向吗? 我不是要求你把代码转发给我,我其实是在努力学习。但是一些帮助会很棒。谢谢!
编辑修复了第一个问题,现在我在行 frame.add(row [i])上得到 java.lang.NullPointerException ;
答案 0 :(得分:7)
<强>问题:强>
JPanel[] row = new JPanel[i];
您正在循环的每次迭代中创建一个新的JPanel
和JButton
数组,这会导致ArrayIndexOutOfBoundsException
循环的第一次迭代i=0
何时执行JPanel[] row = new JPanel[0]; frames.add(row[0]);
<强>溶液强>
对于两个数组,只在循环外创建一个数组实例,并在循环的每次迭代中更新该实例。以下是JPanel
数组的示例:
JPanel[] row = new JPanel[12]; //Make 12 new JPanels (row[0] - row[12])
for(int i = 0; i < row.length; i++){
frame.add(row[i]);
row[i].setBounds(0, i*25, 300, 25);
row[i].setVisible(true);
编辑:
JPanel[] row = new JPanel[12];
for (int i = 0; i < 12; i++) {
row[i] = new JPanel();
frame.add(row[i]);
row[i].setBounds(0, i * 25, 300, 25);
row[i].setVisible(true);
JButton[] button = new JButton[12];
for (int j = 0; i < 12; i++) {
button[j] = new JButton();
row[i].add(button[j]);
button[j].setBounds(i * 25, 0, 25, 25);
button[j].setVisible(true);
}
}
答案 1 :(得分:0)
行[0]到行[12]将创建13行。排成行[11]