文本区含有一个实现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)
void | changedUpdate(DocumentEvent e) Gives notification that an attribute or set of attributes changed. |
void | insertUpdate(DocumentEvent e) Gives notification that there was an insert into the document. |
void | removeUpdate(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();
}
}
}