2014-09-22 135 views
1

所以這是一個概念:簡單地說,有一個帶有「Name」作爲值的文本框,並且我希望如果在文本框中單擊任意位置,值「Name」將消失。這是我在我的代碼所做的:如何將actionlistener添加到Java中的文本字段中

JTextField t1 = new JTextField("Name", 10); 

t1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent cl){ 
       t1.setText(" "); 
      } 
     }); 

有沒有語法錯誤,但是當我運行該程序,並在文本框中某處點擊,沒有任何反應和值「名稱」依然存在

任何幫助將不勝感激,謝謝!

+0

這不應該編譯。 't1'應該是'final'以在內部類中被訪問。 – manouti 2014-09-22 09:50:58

+0

我不小心排除了最後,對不起。但在我的程序中,它是:final JTextField t1 = new JTextField(「Name」,10); – 2014-09-22 09:53:19

+0

1)在'JTextField'上按下'ENTER'鍵後調用'ActionListener' 2)在1.8中可以不用'final'聲明。 你試圖達到什麼目的? – alex2410 2014-09-22 09:57:20

回答

4

你可以試試這個:

t1.addFocusListener(new FocusListener() { 

    @Override 
    public void focusGained(FocusEvent e) { 
     t1.setText(null); // Empty the text field when it receives focus 
    } 

}); 
+0

謝謝!這對我有用,我只是添加了focusLost事件,再次給t1值「Name」,這很酷。 – 2014-09-22 10:07:10

+0

雖然問題,'@Override'的目的是什麼?我刪除它,程序運行得很好 – 2014-09-22 10:10:05

+0

@Override在Java中的註釋是可選的,但有幫助。它定義我們正在使用新方法或覆蓋現有方法。您可以閱讀java的Method Overriding主題以獲得清晰的想法。謝謝 – Mohit 2014-09-22 10:17:22

3

您不應該爲此使用ActionListener。而不是FocusListener應該爲你工作,在這裏解釋:http://www.java2s.com/Code/JavaAPI/javax.swing/JTextFieldaddFocusListenerFocusListenerl.htm

+0

我已經試過這「t1.addFocusListener(新的FocusListener(){ 公共無效focusGained(FocusEvent e)在{ t1.setText( 「」);} 公共 無效focusLost(FocusEvent e)在{ }} );」但是當我運行該程序時,不會顯示值「名稱」 – 2014-09-22 09:57:33

+0

嘗試使用以下其他方法: public void focusLos(FocusEvent e){tt} setText(「Name」); } 並使文本框不要求重點啓動! – 2014-09-22 09:58:23

+0

@RexEndozo'但是當我運行該程序時,值「Name」根本不會出現,似乎是因爲你的JTextField增益集中在開始。 – alex2410 2014-09-22 10:01:08

相關問題