DocumentEvent事件

文本区含有一个实现Document接口的实例,该实例被称作文本区所维护的文档,文本区调用getDocument()方法返回所维护的文档。文本区所维护的文档能触发Document事件,特别注意,DocumentEvent类在javax.swing.event包中。用户在文本区进行文本编辑从操作,使得文本区中的文本内容发生变化,将导致文本区所维护的文档模型中的数据发生变化,从而导致文本区所维护的文档触发DocumentEvent事件。

 

注册监听器

addDocumentListener(DocumentListener listen)将DocumentListener接口类的实例注册为事件源的监听器

 

DocumentListener接口中有三个方法

public void changedUpdata(DocumentEvent e)

public void RemoveUpdata(DocumentEvent e)

public void insertUpdata(DocumentEvent e)

voidchangedUpdate(DocumentEvent e)

Gives notification that an attribute or set of attributes changed.

voidinsertUpdate(DocumentEvent e)

Gives notification that there was an insert into the document.

voidremoveUpdate(DocumentEvent e)

Gives notification that a portion of the document has been removed.

package javawork;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Arrays;

import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.io.*;
import java.util.*;

/*将用户在一个文本区输入的单词按字典排序后放入另一个文本区
用户在窗口中的一个文本区inputArea内编辑单词,触发DocumentEvent事件,
监听器textListener(TextListener类负责创建)通过处理该事件将该文本区的单词排序,并将排序结果
放入另一个文本区showTextArea中,即随着文本区InputArea内容的变化,另一个文本区showTextArea不断更新排序
用户选择名字为“复制(c)/剪切、粘贴”copy的菜单项触发ActionEvent事件,监听器handle(handleListener类负责创建)将用户在showTextArea选中的文本复制到剪贴板
*/
public class TextListener implements DocumentListener {

	private JTextArea inputText,showText;
	
	@Override
	public void changedUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		
		String str=inputText.getText();//这里已经有字符串了,我的小顾虑
		String regex="[\\s\\d\\p{Punct}]+";//空格、数字和符号组成的正则表达式
		String words[]=str.split(regex);
		Arrays.sort(words);//进行单词排序
		showText.setText(null);
		for(int i=0;i<words.length;i++)
		{
			showText.append(words[i]+",");
		}
	}

	@Override
	public void insertUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		changedUpdate(e);
		
	}

	@Override
	public void removeUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		changedUpdate(e);
	}

	public void setInputText(JTextArea text)
	{
		inputText=text;
	}
	public void setShowText(JTextArea text)
	{
		showText=text;
	}
}


package javawork;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HandleListener implements ActionListener {

	private JTextArea inputText,showText;
	public void setInputText(JTextArea text)
	{
		inputText=text;
	}
	public void setShowText(JTextArea text)
	{
		showText=text;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String str=e.getActionCommand();
		if(str.equals("copy"))
			showText.copy();
		else if(str.equals("cut"))
			showText.cut();
		else if(str.equals("paste"))
			inputText.paste();
		
	}

}



package javawork;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.*;
public class WindowDocument extends JFrame{

	private JTextArea inputText,showText;
	private JMenuBar menuBar;
	private JMenu menu;
	private JMenuItem itemCopy,itemCut,itemPaste;//菜单项复制,剪切,粘贴选项
	TextListener textChangelistener;
	HandleListener handlelistener;
	public WindowDocument()
	{
		setLayout(new FlowLayout());
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		inputText=new JTextArea(15,20);
		showText=new JTextArea(15,20);
		
		showText.setLineWrap(true);//设置文本自动回行
		showText.setWrapStyleWord(true);//设置文本区一单词为界自动换行
		menuBar=new JMenuBar();
		menu=new JMenu("编辑");
		itemCopy=new JMenuItem("复制(c)");
		itemCut=new JMenuItem("剪切(t)");
		itemPaste=new JMenuItem("粘贴(p)");
		itemCopy.setAccelerator(KeyStroke.getKeyStroke('c'));//设置快捷方式
		itemCut.setAccelerator(KeyStroke.getKeyStroke('t'));
		itemPaste.setAccelerator(KeyStroke.getKeyStroke('p'));
		itemCopy.setActionCommand("copy");//作用就是另外设置一个字符串来判断你究竟选择的是哪一个组件
		itemCut.setActionCommand("cut");
		itemPaste.setActionCommand("paste");
		menu.add(itemCopy);//菜单添加菜单项
		menu.add(itemCut);
		menu.add(itemPaste);
		menuBar.add(menu);//菜单条添加菜单
		setJMenuBar(menuBar);//添加菜单条
		add(new JScrollPane(inputText));
		add(new JScrollPane(showText));
		
		textChangelistener=new TextListener();
		textChangelistener.setInputText(inputText);
		textChangelistener.setShowText(showText);
		
		handlelistener=new HandleListener();
		handlelistener.setInputText(inputText);
		handlelistener.setShowText(showText);
		(inputText.getDocument()).addDocumentListener(textChangelistener);
		//向文档注册监听器
		
		itemCopy.addActionListener(handlelistener);//向菜单项注册监听器
		itemCut.addActionListener(handlelistener);
		itemPaste.addActionListener(handlelistener);
		
	}
	
	
	
}


package javawork;

public class Example9_9 {
	
	public static void main(String args[])throws NullPointerException
	{
		try
		{
			WindowDocument win=new WindowDocument();
			win.setSize(400,150);
			win.setTitle("排序单词");
		}
		catch (NullPointerException e)
		{
			e.printStackTrace();
		}
			
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值