2013-03-07 44 views
2

我懷疑這是一個很平凡的問題。 我希望創建一個擴展JTextField的組件MyTextField; 組件應通過更改顏色來響應獲得焦點,並根據輸入是否有效通過更改爲兩種顏色之一來響應失去焦點。 怎麼辦?如何擴展JTextField以生成一個定義的響應focusgain

+1

擴展您的類並添加焦點監聽器它... [如何寫一個焦點聽衆](h ttp://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html) – MadProgrammer 2013-03-07 06:34:21

回答

4

你可以讓你MyTextField類擴展JTextField並實現FocusListener

選項#1

public class MyTextField extends JTextField implements FocusListener { 
    public MyTextField(){ 
     addFocusListener(this); 
    } 

    @Override 
    public void focusGained(FocusEvent event) { 

    } 

    @Override 
    public void focusLost(FocusEvent event) { 

    } 
} 

選項#2

public class MyTextField extends JTextField { 
public MyTextField(){ 
    addFocusListener(new FocusListener() { 
      @Override 
      public void focusLost(FocusEvent arg0) { 
      } 

      @Override 
      public void focusGained(FocusEvent arg0) { 
      } 
     }); 
} 
} 
+3

不錯的概念,但是您可能希望爲焦點偵聽器使用內部類來防止暴露'focusGained/Lost'方法,因爲他們不需要被其他人打電話 - 只是一個想法。 – MadProgrammer 2013-03-07 06:39:16

+0

@MadProgrammer好想法!我相信上面的代碼可以很容易地修改,爲'addFocusListener'函數提供內部類。 – Apurv 2013-03-07 06:42:04

+0

當然,這個概念的工作;) – MadProgrammer 2013-03-07 06:44:58