2014-04-02 143 views
0

当我运行我的程序时,它只显示几行,然后在它下面显示灰色。有人可以向我解释为什么发生这种情况?我希望网格布局有8行,其中应包括标签和文本框。我不确定为什么只有其中几个出现。我的GUI没有完全显示

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

回答

2

您应该将GridLayout设置为面板而不是框架。该小组是为组件的容器,所以应该是一个与GridLayout

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

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


旁注

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

  • 另外,你的班级是已经 a JFrame。没有必要创建另一个。选择一个或另一个。请使用实例JFrame,而不要使用extends JFrameextend JFrame,并且不要使用额外的实例。我会和前者一起去的。

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

  • 此外,Swing应用程序应该从Event Dispatch Thread运行。您可以通过将main方法内容封装在SwingUtilities.invokeLater(...)中来完成此操作。看更多在Initial Threads

+0

非常感谢您的彻底答案! – user2288575