我的GUI没有完全显示

时间:2014-04-02 04:44:28

标签: java swing user-interface layout jframe

当我运行程序时,它只显示几行,然后在它下面显示灰色。有人可以向我解释为什么会这样吗?我希望网格布局有8行,其中应包括标签和文本框。我不确定为什么只有少数出现。

public class Application extends JFrame {
    private JPanel panel;
    private JLabel label1, label2, label3, label4, label5, label6, label7,
            label8;
    private JTextField text1, text2, text3, text4, text5, text6, text7, text8;

    public Application() {

        JFrame gui = new JFrame();
        gui.setLayout(new GridLayout(8, 2));
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        gui.setTitle("Vacation Expenses");
        gui.setSize(500, 500);

        panel = new JPanel();
        gui.add(panel);

        label1 = new JLabel("Number of days on the trip");
        label2 = new JLabel("Amount of airfare");
        label3 = new JLabel("Amount of car rental fees");
        label4 = new JLabel(
                "Number of miles driven, if a private vehicle was used");
        label5 = new JLabel("Amount of parking fees, if any");
        label6 = new JLabel("Amount of taxi charges, if any");
        label7 = new JLabel("Conference or seminar registration fees, if any");
        label8 = new JLabel("Lodging charges, per night");

        text1 = new JTextField("0", 10);
        text2 = new JTextField("0", 10);
        text3 = new JTextField("0", 10);
        text4 = new JTextField("0", 10);
        text5 = new JTextField("0", 10);
        text6 = new JTextField("0", 10);
        text7 = new JTextField("0", 10);
        text8 = new JTextField("0", 10);

        panel.add(label1);
        panel.add(text1);
        panel.add(label2);
        panel.add(text2);
        panel.add(label3);
        panel.add(text3);
        panel.add(label4);
        panel.add(text4);
        panel.add(label5);
        panel.add(text5);

        // JButton button = new JButton("Button");
        // panel.add(button);

        gui.setVisible(true);

    }

    public static void main(String[] args) {
        new Application();
    }
}

1 个答案:

答案 0 :(得分:2)

您应该将GridLayout设置为面板,而不是框架。面板是组件的容器,因此应该是GridLayout

的容器

摆脱gui.setLayout(new GridLayout(8, 2));

并使用panel = new JPanel(new GridLayout(8, 2));


附注

  • 另请注意,您尚未添加所有组件。你只添加了五个。你忘了添加其他三个。

  • 此外,您的班级已经一个JFrame。没有必要再创建另一个。选择其中一个。使用实例JFrame并且不要extends JFrameextend JFrame并且不要使用额外的实例。我和前者一起去。

  • 此外,最好pack()您的框架,而不是setSize()。在添加所有组件后,pack()应该完成。

  • 此外,Swing应用程序应该从Event Dispatch Thread运行。您可以通过将main方法内容包装在SwingUtilities.invokeLater(...)中来实现此目的。详情请见Initial Threads