给文本框加入监听器事件,监听文本框中的内容是否发生了变化。
JTextField中没有设置TextListener,而是将对文本的监视任务放入了另外一个接口Document中。因此首先要为JTextField对象申请一个Document接口对象,使用的方法是JTextField1.getDocument()(本文给出的JTextField对象名为JTextField1)。获得Document后,就可以使用addDocumentListener()来得到一个和TextListener功能类似的监听接口
查阅API后得知需要JTextField中的getDocument()函数,为这个方法添加文本监听器addDocumentListener,这个监听器下有三个自动写好的方法insertUpdate(),removeUpdate(),changedUpdate(),分别能够实现插入更新、删除更新、更改文本的监听。
public void changedUpdate(DocumentEvent e):监听文本属性的变化;
public void insertUpdate(DocumentEvent e):监听文本内容的插入事件;
public void removeUpdate(DocumentEvent e):监听文本内容的删除事件
由于JTextField中的文本只限于上述这三种形式的改变,因此通过getDocument()方法再增添此种监听器可以实现JTextField文本框输入数据的实时判断功能。
package VideoTest;
/*给文本框中加入监听器事件,当文本框中的数据发生变化时,
* 在控制台说明相应的变化
*/
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
public class TestOverride extends JFrame implements DocumentListener{
public static void main(String[] args){
new TestOverride().init();
}
int i=0;
JPanel contentPanel;
JTextField textField;
public void init(){
contentPanel = new JPanel();
setContentPane(contentPanel);
// contentPanel.setBounds(400,200,400,400);
textField = new JTextField(20);
textField.setBounds(50, 50, 150, 50);
//textField.setColumns(10);
//关键是下面这两行代码,
Document document = textField.getDocument();
document.addDocumentListener(this);
contentPanel.add(textField);
this.setLayout(null);
this.setVisible(true);
this.setBounds(500, 300, 500, 500);
//this.setSize(500, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.add(contentPanel);
}
@Override
public void insertUpdate(DocumentEvent e) {
i++;
System.out.println( "插入更新监听"+ "insert text" );
}
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("插入删除更新 的监听"+"remove text");
}
@Override
public void changedUpdate(DocumentEvent e) {
int i=0;
i++;
System.out.println("插入 更改文本的监听。"+"change text"+i);
}
}
运行结果如下: