2014-04-02 57 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