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

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);
}
}

DocumentEvent事件的应用的更多相关文章

  1. java中事件处理探究

    事件的触发可以源于用户,也可以用代码来主动设置事件的发生.如setSelected()java.awt.event中 听众接口 事件类 适配器类 ComponentListener     Conta ...

  2. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  3. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  4. js自定义事件、DOM/伪DOM自定义事件

    一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...

  5. 转: JS自定义事件的定义和触发(createEvent, dispatchEvent)

    四.伪DOM自定义事件 这里的“伪DOM自定义事件”是自己定义的一个名词,用来区分DOM自定义事件的.例如jQuery库,其是基于包装器(一个包含DOM元素的中间层)扩展事件的,既与DOM相关,又不直 ...

  6. 为WebBrowser的WEB页的Document注册事件的问题

    原文:为WebBrowser的WEB页的Document注册事件的问题 当使用WebBrowser,并对其装载的Web页建立Document的事件后,WebBrowser里的页面元素都变得难于操作了, ...

  7. 如何模拟click事件,打开一个a标签链接?

    在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截. ...

  8. js模拟点击事件实现代码

    js模拟点击事件实现代码 类型:转载 时间:2012-11-06 在实际的应用开发中,我们会常常用到JS的模事件,比如说点击事件,举个简单的例子,点击表单外的"提交"按钮来提交表单 ...

  9. CDI services--Event(事件)

    Cdi中的event事件,是整个CDI的精华所在之一.其有点类似设计模式中的观察者模式.但也有不同的地方.如下3点: 不仅是生产者(producers)从观察者(observers)解耦.观察者也从生 ...

随机推荐

  1. promise 的学习

    promise 是为了解决异步操作的顺序问题而产生的 特性 promise 的实例一旦创建就会执行里面的异步操作 promise 的实例状态一旦改变就变成凝固的了, 无法再对其作出修改,  (不明白为 ...

  2. 在vue中使用lang="scss"出现报错解决思路

    最近在学习vue框架,使用lang="scss" 出现如下错误: This dependency was not found: * !!vue-style-loader!css-l ...

  3. 洛谷P4778 Counting swaps 数论

    正解:数论 解题报告: 传送门! 首先考虑最终的状态是固定的,所以可以知道初始状态的每个数要去哪个地方,就可以考虑给每个数$a$连一条边,指向一个数$b$,表示$a$最后要移至$b$所在的位置 显然每 ...

  4. node.js爬取ajax接口数据

    爬取页面数据与爬取接口数据,我还是觉得爬取接口数据更加简单一点,主要爬取一些分页的数据. 爬取步骤: 1.明确目标接口地址,举个例子 : https://www.vcg.com/api/common/ ...

  5. SpringBoot 学习教程(二):示例

    发布方式 构建Jar包,cmd命令行运行Spring Boot程序 第一步:在pom.xml中将packing节点值修改为jar,如下面加粗部分: <groupId>com.example ...

  6. [Freemarker]自定义时间戳函数

    使用freemarker的web项目经常需要用在Url后面加上时间戳来保证资源不被缓存,我们可以自定义方法实现时间戳. 先看freemarker配置信息: <bean id="free ...

  7. DAX/PowerBI系列 - 建模视图可以多个分页

    PowerBI 十一月的更新终于有了一个解决密集恐惧症患者的方法,建模视图每个tab专注于一个领域,更加简洁. ps: Microstrategy早就有了.

  8. JS变量类型与计算

    一.题目 1.JS中使用typeof能得到哪些类型? 2.何时使用===何时使用==? 3.JS中有哪些内置函数? 4.JS变量按照存储方式区分为哪些类型,并描述其特点? 5.如何理解JSON? 知识 ...

  9. 微信小程序 修改手机状态栏颜色

    在json中 添加 "navigationBarTextStyle": "white",  

  10. mysql修改用户密码笔记(转)

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...