2013-03-21 76 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];