2013-03-02 90 views
8

我無法將JTextField添加到JFrame。我的JFrame包含一個JLabel和一個JTextField。 首先,我添加了JLabel,它正在工作。這是代碼。無法將JTextField添加到JFrame

private static void createandshowGUI() 
    { 

    JFrame frame =new JFrame("HelloSwing"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setBackground(Color.red); 
    frame.setSize(200,200); 

    JLabel label=new JLabel("New To Java!!"); 
    frame.getContentPane().add(label); 
    frame.setVisible(true); 
} 
public static void main(String[] args) { 
    createandshowGUI();} //and it shows the output like below . 

Frame having JLabel

然後,我添加JTextField中。

JLabel label=new JLabel("New To Java!!"); 
    frame.getContentPane().add(label); 

    JTextField jtf=new JTextField(); 
    frame.getContentPane().add(jtf); 

    frame.setVisible(true); 

但是,然後它顯示這樣的輸出。

Frame having JLabel and JTextField

請別人幫我在這issue.Can我到JFrame中添加一個以上的成分?由於我是新來的Java,我有框架,contentPane的和佈局之間的混淆。

+4

+1爲優秀結構化的問題。 – christopher 2013-03-02 09:26:11

回答

8

其實你已經成功添加了JTextField。您遇到的問題源於佈局管理器,它將整個框架延伸。

默認情況下,JFrame的內容窗格使用BorderLayout管理器。 (請參見How to Use BorderLayout

在我的應用程序中,總是使用MigLayout管理器,但首先您可能需要熟悉佈局管理器。 (請參閱A Visual Guide to Layout Managers

+0

+1 for MigLayout - 當我尋找佈局時,我也最終使用這個 – exexzian 2013-03-02 09:38:58

3

您的ContentPane默認爲BorderLayout,它只接受單個元素(位於默認位置 - 中心)。在添加第二個元素(JTextField)後,它取代了最後一個元素(JLabel)。

當您使用單參數add將元素添加到Container時,您沒有指定所需的位置,因此佈局管理器可以隨意選擇一個位置。 OTOH如果你指定了約束條件(使用overloaded add),那麼你可以更好地控制元素的放置位置。查看每個佈局管理器的文檔,瞭解它們如何工作以及支持哪些約束。

對於您目前的情況,你可以使用一箇中間JPanel(其中有FlowLayout作爲其默認LayoutManager - 對誰仍然在學習最簡單恕我直言),而不是直接將元素添加到內容窗格中,或簡單地改變其佈局的東西其他。

+0

好的答案,但對於新手來說有點太複雜。仍然+1 – 2013-03-02 09:58:37

-1

A JFrame只能有一個組件(除非您使用的是它有一個BorderLayout)。解決方案是使用JPanel。 將對象添加到JPanel,然後將JPanel添加到JFrame。您還需要添加import javax.swing.JPanel;。你可以這樣做:

private static void createandshowGUI() 
{ 
    JFrame frame =new JFrame("HelloSwing"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setBackground(Color.red); 
    frame.setSize(200,200); 

    JPanel panel = new JPanel(); //Create a JPanel 

    JLabel label=new JLabel("New To Java!!"); 
    panel.add(label); // Add the label to the panel 

    JTextField jtf = new JTextField(); 
    panel.add(jtf); // Add the JTextField to the panel 

    frame.getContentPane().add(panel); // Add the panel to the JFrame 
    frame.setVisible(true); 
} 
public static void main(String[] args) { 
    createandshowGUI();} 

這應該工作。

+0

謝謝..小組工作.. – Sam 2013-03-07 11:47:12

+0

@Sam但Daniel Rikowski的回答更有用? ;-) – 2013-03-07 12:35:41

+1

當然可以。這就是爲什麼我接受了這個答案。但在邊界佈局中遇到了一些問題,我正要問。專家小組給了我即時的結果。 :) 謝謝。 – Sam 2013-03-07 13:35:31