2013-03-07 43 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