我有一个swing应用程序,我在其中声明了一个JButton数组,在该类的构造函数中我创建了一个for循环,以便将114个JButton添加到类容器中。
但是当该类运行时,它会给出异常
java.lang.ArrayIndexOutOfBoundsException: 0
在将按钮添加到容器的声明中。
有人能看到问题吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame implements ActionListener
{
public Main()
{
Container pane = getContentPane();
JPanel panel = new JPanel();
JButton b[];
int i;
for (i = 0; i < 114; i++)
{
b = new JButton[i];
panel.add(b[i]);
}
pane.add(panel);
}
public void actionPerformed(ActionEvent ae)
{
}
public static void main(String[] args)
{
Main m = new Main();
m.setSize(500, 500);
m.setVisible(true);
}
}
答案 0 :(得分:3)
你不能像那样表达
for(i=0; i<114;i++)
{
b = new JButton[i];
panel.add(b[i]);
}
在第一次执行时,它是新的JButton [0],所以你的数组大小是0。
您应该使用Collection(fe.ArrayList)或固定大小的JButton数组。
JButton[] b = new JButton[114];
for(i=0; i<114;i++)
{
b[i] = new JButton();
panel.add(b[i]);
}
答案 1 :(得分:2)
在i = 0时,b = new JButton[i];
创建一个大小为0的数组,因此尝试引用b[0]
(即第一个元素)将超出范围。
你永远不会构建b[i]
。
您可能希望将数组构造移到循环外部,例如:
b = new JButton[114];
for (i = 0; i < 114; i++)
{
b[i] = new JButton();
panel.add(b[i]);
}
答案 2 :(得分:0)
因为b是一个包含JButton对象集合的数组类型。所以你需要创建
一个JButton对象,用于该数组的每个位置。 Dukeling给出的代码是
正确的方法。还有一件事你已经忘记了,你需要定义它的大小
您的数组如JButton b[]=new JButton[size];