JTextField文本更改的监听器

3

我有一个JTextField,我想为它添加监听器,当JTextField失去焦点时(例如当我用鼠标点击另一个组件),将接收到一些事件。此外,我希望监听器在JTextFieldtext参数更改时(例如当我使用jtextfield.setText(anotherText)设置文本时)也能接收到事件。你有什么好的方法吗?

2个回答

6

1
如果你只想知道文本属性何时更改,也可以使用PropertyChangeListener。 - MadProgrammer
+1 和 @MadProgrammer 我把你的评论变成了答案 :) - nachokk

3
如@MadProgrammer所指出,如果你只对监听“text”属性感兴趣。只需添加一个PropertyChangeListener。
示例:
   JTextField textfield = new JTextField();
   //for focus use FocusAdapter and just override focus lost
   textfield.addFocusListener(new FocusAdapter(){
       @Override
       public void focusLost(final FocusEvent evt){
           //i always like to wrap this method with swing utilities
           // which puts it at the end of the EventQueue, so it's executed after all pending events
           SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run(){
                    //code here
                }
           });
       } 
  });

  textfield.addPropertyChangeListener("text", new PropertyChangeListener(){
             @Override
             public void propertyChange(PropertyChangeEvent evt){
                    if(evt == null)
                        return;

                    if("text".equals(evt.getPropertyName())){
                         //code here
                    }
             }
  });

2
供参考,属性更改监听器在我这里不起作用,使用的是Java 1.6。它从未被调用过。Java.asw.Container.addPropertyChangeListener的Javadoc列出了属性,但没有包括“text”。也许它是在以后的版本中添加的。 - Jeff Learman
1
@JeffLearman,“value”属性可能是适合使用的。 - Samuel Edwin Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接