DocumentEvent事件的应用

将用户在一个文本区输入的单词按字典序排好后放入另一个文本区,并添加菜单

 

example002类

package example;

public class example002 { 
   public static void main(String[] args) {
      WindowDocument win=new WindowDocument();
       win.setBounds(100,100,590,500);
       win.setTitle("DocumentEvent事件的处理--排序单词");
   }
}

 

WindowDocument类

package example;

import java.awt.*;
 
import javax.swing.*;
 
 
public class WindowDocument extends JFrame {
    JTextArea inputText, showText;
    JMenuBar menubar; //菜单条
    JMenu menu;  //菜单
    JMenuItem itemCopy,itemCut,itemPaste; //菜单选项,复制,剪切,粘贴
    TextListener textChangeListener;//inputText的监视器
    HandleListener handleListener;//itemCopy,itemCut,itemPaste的监视器
    WindowDocument() {
        init();
        setLayout(new FlowLayout());
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init() {
        inputText = new JTextArea(15,20);
        showText = new JTextArea(15,20);
        showText.setLineWrap(true);//文本自动回行
        showText.setWrapStyleWord(true);//文本区以单词为界自动换行
        //设置换行方式(如果文本区要换行)。如果设置为 true,
        //则当行的长度大于所分配的宽度时,将在单词边界(空白)处换行。如果设置为 false,
        //则将在字符边界处换行。此属性默认为 false。
        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();
        handleListener = new HandleListener();
        textChangeListener.setInputText(inputText);
        textChangeListener.setShowText(showText);
        handleListener.setInputText(inputText);
        handleListener.setShowText(showText);
        (inputText.getDocument()).addDocumentListener(textChangeListener);
        //向文档注册监视器
        itemCopy.addActionListener(handleListener);//向菜单项注册监视器
        itemCut.addActionListener(handleListener);
        itemPaste.addActionListener(handleListener);
    }
}

 

HandleListener类

package example;

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

import javax.swing.JTextArea;

public class HandleListener implements ActionListener{
JTextArea inputText,showText;
public void setInputText(JTextArea text) {
    inputText=text;
}
public void setShowText(JTextArea text) {
    showText=text;
}
    @Override
    public void actionPerformed(ActionEvent e) {
        String str=e.getActionCommand();
        if(str.equals("copy"))
            showText.copy();
        else if(str.equals("cut"))
            showText.cut();
        else if(str.equals("paste"))
            inputText.paste();
    }

}

 

TextListener类

package example;

import java.util.Arrays;

import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class TextListener implements DocumentListener{
       JTextArea inputText,showText;
       public void setInputText(JTextArea text) {
           inputText=text;
       }
public void setShowText(JTextArea text) {
    showText=text;
}
public void changedUpdate(DocumentEvent e) {
    String str=inputText.getText();
    //空格数字和符号组成的正则表达式
    String regex="[\\s\\d\\p{Punct}]+";
    //匹配以下字符任意多个
    String words[]=str.split(regex);//split()方法用于把一个字符串分割成字符串数组
    Arrays.parallelSort(words);//按字典序从小到大排序
    showText.setText(null);
    for(int i=0;i<words.length;i++)
        showText.append(words[i]+",");
}
public void removeUpdate(DocumentEvent e) {
    changedUpdate(e);
}
public void insertUpdate(DocumentEvent e) {
    changedUpdate(e);
}
}
posted @ 2019-04-28 00:46  yyer  阅读(431)  评论(0编辑  收藏  举报