java Jbutton数组阻止构造函数完成运行

时间:2016-04-25 21:02:45

标签: java arrays jpanel jbutton

所以我想创建一个用8个JButton创建JPanel窗口的程序。我没有重复JButtons,只是用所有JButton创建了一个数组,并创建了一个循环来创建它们。但是,自从我创建了一个数组之后,构造函数将在循环结束后继续进行。直到我把JButtons变成数组才发生这种情况。

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);



    }
}

是的,我导入了所需的所有内容,并在单独的类中创建了该类的对象。它将运行,但构造函数将不会在循环后继续。如果使用数组&#34; Subject [i]&#34;删除行,则构造函数完成并显示窗口,但是对于数组,它不会。为什么?

2 个答案:

答案 0 :(得分:2)

也许是因为你有一个包含7个元素的JButton数组,并且你想要初始化其中的8个元素。使用private JButton Subject[] = new JButton[8]更改声明,您将会修复。

答案 1 :(得分:0)

你的代码对我来说很合适,你只是在#34; for#34;中有一个数组出界。循环,条件必须是for (int i = 0; i<7; i++),但其他一切都有效,记得打电话给&#34; new Gui().setVisible(true);&#34;