0

我有一个摇摆应用程序,我在该类的构造函数中声明了一个 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);
   }
}
4

3 回答 3

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]);
}
于 2013-03-21T10:21:15.470 回答
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]);
}
于 2013-03-21T10:22:22.770 回答
0

因为 b 是一种数组类型,其中包含 JButton 对象的集合。因此您需要为该数组的每个位置创建一个 JButton 对象。Dukeling 给出的代码是正确的方法。还有一件事你忘记了,你需要定义你的数组的大小,比如JButton b[]=new JButton[size];

于 2013-03-21T10:33:03.183 回答