2014-02-16 36 views
0

所以我剛剛開始玩圖形用戶界面,我正在嘗試從用戶那裏獲取文本輸入,並將其分配給一個變量供以後使用。JTextField的getText()可打印可變

簡單,我想。錯了,我是。

我希望我的框架看起來像:

public class firstFrame extends JFrame { 

JTextField f1 = new JTextField(); 
String text; 

public firstFrame(String title) { 
    super(title); 

    setLayout(new BorderLayout()); 

    Container c = getContentPane(); 

    c.add(f1); 

    text = f1.getText(); 

    System.out.println(text); 

    } 
} 

其中變量text會得到任何文本鍵入的用戶,然後打印到控制檯。簡單。

我有一種感覺,我在這裏錯過了一些非常重要的東西,並且如果有人能夠讓我知道那是什麼東西,我將不勝感激。

請放心,我今天剛開始玩這個東西。

+0

文本域不會有任何文本,直到用戶類型。當用戶鍵入內容時,您需要調用'text = f1.getText();'將Keylistener添加到文本字段中,並在捕獲事件時保存文本。 – adchilds

+1

你想了解的是Eventhandlers,http://docs.oracle.com/javase/tutorial/uiswing/events/,它監聽程序中的組件,並告訴你什麼時候發生了什麼,即用戶輸入。 – Martin

+0

@Martin我會閱讀。感謝Martin。 – ViRALiC

回答

1

getText()得到那就是在JTextArea它被稱爲當時的文本。

您正在構造函數中調用它。所以當你實例化new firstFrame時,沒有初始文本。

要記住的一件事是GUI是事件驅動的,這意味着您需要一個事件處理程序來捕獲和處理事件。

一種選擇是增加一個ActionListenerJTextField所以當你按下輸入文字後回車,文本將打印。

f1.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String text = f1.getText(); 
     System.out.println(text); 
    } 
}); 

多見於如何Create GUI with SwingWriting Event Listeners

+0

非常有幫助,謝謝!最佳答案! – ViRALiC

2

該變量將不會更新,直到組件發生事件。對於這樣的DocumentListenerActionListener可用於

f1.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     String text = f1.getText(); 
     ... 
    } 
}); 
+0

感謝隊友,也很有幫助。 – ViRALiC