文本区的DucumentEvent事件

文本区可以触发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方法
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值