2016-04-25 56 views
1

所以我想创建一个程序,创建一个带有8个JButton的JPanel窗口。我不是重复JButton,而是用所有的JButton创建一个数组,并创建一个循环来创建它们。自从我创建了一个数组后,构造函数将不会在循环完成后继续。直到我将JButton放入一个数组,才会发生这种情况。java jbutton数组防止构造函数完成运行

public class Gui extends JFrame { 

private JButton Subject[] = new JButton[7]; 
private String SubjNames[] = {"Length", "Mass", "Currency", "Temperature", "Time", "Speed", "Data", "Cooking"}; 

private int SubjectLocX = 40; 
private int SubjectLocY = 50; 




public Gui(){ 

    super("Converter"); 
    setLayout(null); 

    System.out.println("yes"); 

    for (int i = 0; i<8; i++) { 
    Subject[i] = new JButton(SubjNames[i]); 
    Subject[i].setLocation(SubjectLocX,SubjectLocY); 
    Subject[i].setSize(200,50); 
    add(Subject[i]); 
    if (i < 3) { 
     SubjectLocX = 40; 
     SubjectLocY += 100; 
    } else if (i == 3) { 
     SubjectLocY = 50; 
    } else if (i > 3) { 
     SubjectLocX = 330; 
     SubjectLocY += 100; 
     } 
    } 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(600,500); 
    setLocation(400,200); 
    setVisible(true); 



    } 
} 

是的,我输入了所有需要的东西,我在一个单独的类中创建了一个类的对象。它会运行,但循环后构造函数不会继续。如果删除数组“Subject [i]”的行,构造函数结束并出现窗口,但是对于数组,它不会。为什么??

+0

记住,当你声明一个数组为'new JButton [7]'意味着你只分配了7个元素 – MadProgrammer

回答

2

也许是因为你有一个包含7个元素的JButton数组,并且你正在初始化8个元素。更改声明private JButton Subject[] = new JButton[8],你会修复。

+0

哇,我觉得愚蠢的哈哈,谢谢 – airide101

+0

不要担心,发生哈哈。不用谢 :) – MingiuX

0

您的代码workinf对我来说,你只是有一个数组越界的“for”循环,条件必须是for (int i = 0; i<7; i++)但一切工作正常,记得打电话“new Gui().setVisible(true);