文本区可以触发DucumentEvent事件,DucumentEvent类在javax.swing.event包中。用户在文本区组件的UI代表的视图中进行文本编辑操作,使得文本区中的文本内容发生变化,将导致该文本区所维护的文档模型中的数据发生变化,从而导致DumumentEvent事件的发生。文本区调用addDumumentListener(DucumentListener listener)方法可以向文本区维护的文档注册监视器。监视器需要实现DumumentListener接口,该接口中有3个方法:
public void changedUpdate(DocumentEvent e)
public void removeUpdate(DocumentEvent e)
public void insertUpdate(DocumentEvent e)
文本调用getDocument()方法返回维护的文档,它是实现Document接口的一个实例。
例子:
创建两个文本区和一个文本框。当用户在文本区左侧进行编辑操作时,文本区右侧将显示左侧文本区中所有和指定模式匹配的字符串。用户事先在文本框中输入[^\s\d\p{Punct}]+,即通过该模式获得左侧文本区的全部单词。
package DucumentEvent;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class B extends JFrame implements DocumentListener,ActionListener{
JTextField jTextField;
JTextArea text1,text2;
//JSplitPane jSplitPane;
Pattern p;//模式对象
Matcher m;//匹配对象
B(){
text1=new JTextArea();
text2=new JTextArea();
jTextField=new JTextField("[^\\s\\d\\p{Punct}]+");
jTextField.addActionListener(this);
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(1, 2));
panel.add(new JScrollPane(text1));
panel.add(new JScrollPane(text2));
add(panel, BorderLayout.CENTER);
add(jTextField, BorderLayout.NORTH);
validate();
(text1.getDocument()).addDocumentListener(this);//向文档注册监视器
setBounds(120, 120, 260, 270);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
hangdleText();
}
@Override
public void insertUpdate(DocumentEvent e) {//接口方法
// TODO Auto-generated method stub
changedUpdate(e);
}
public void hangdleText() {
// TODO Auto-generated method stub
text2.setText(null);
String s=text1.getText();
p=Pattern.compile(jTextField.getText());//初始化模式对象
m=p.matcher(s);
while (m.find()) {
text2.append("从"+m.start()+"到"+m.end()+":");
text2.append(m.group()+":\n");
}
}
@Override
public void removeUpdate(DocumentEvent e) {//接口方法
// TODO Auto-generated method stub
changedUpdate(e);
}
@Override
public void changedUpdate(DocumentEvent e) {//接口方法
// TODO Auto-generated method stub
hangdleText();//调用hangdkeText方法
}
}