通过循环添加JButton会导致ArrayIndexOutOfBoundsException

时间:2013-03-21 10:02:06

标签: java swing

我有一个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);
   }
}

3 个答案:

答案 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];