当我运行程序时,它只显示几行,然后在它下面显示灰色。有人可以向我解释为什么会这样吗?我希望网格布局有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();
}
}
答案 0 :(得分:2)
您应该将GridLayout
设置为面板,而不是框架。面板是组件的容器,因此应该是GridLayout
摆脱gui.setLayout(new GridLayout(8, 2));
并使用panel = new JPanel(new GridLayout(8, 2));
附注
另请注意,您尚未添加所有组件。你只添加了五个。你忘了添加其他三个。
此外,您的班级已经一个JFrame
。没有必要再创建另一个。选择其中一个。使用实例JFrame
并且不要extends JFrame
或extend JFrame
并且不要使用额外的实例。我和前者一起去。
此外,最好pack()
您的框架,而不是setSize()
。在添加所有组件后,pack()
应该完成。
此外,Swing应用程序应该从Event Dispatch Thread运行。您可以通过将main
方法内容包装在SwingUtilities.invokeLater(...)
中来实现此目的。详情请见Initial Threads