2013-03-21 68 views
0

我有一个swing应用程序,我已经在它的构造函数里面声明了一个JButton数组,我创建了一个for循环以便将114个JButton添加到类容器中。通过循环添加JButton导致ArrayIndexOutOfBoundsException

但该类运行时,它提供例外

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

不能制成表达这样

for(i=0; i<114;i++) 
{ 
b = new JButton[i]; 
panel.add(b[i]); 
} 

在第一执行它的新的JButton [0],所以你的阵列大小为0。

应使用系列(FE ArrayList)或固定大小的JButton数组。

JButton[] b = new JButton[114]; 
for(i=0; i<114;i++) 
{ 
b[i] = new JButton(); 
panel.add(b[i]); 
} 
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]); 
} 
0

因为B的JButton objects.So的控股收集你需要创建一个 每个JButton对象,该数组类型该阵列的位置。 Dukeling给出的代码是 正确的方法。还有一件事你已经忘记了,你需要定义 的大小,如JButton b[]=new JButton[size];

相关问题