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);
}
}
DocumentEvent事件的应用的更多相关文章
- java中事件处理探究
事件的触发可以源于用户,也可以用代码来主动设置事件的发生.如setSelected()java.awt.event中 听众接口 事件类 适配器类 ComponentListener Conta ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- js自定义事件、DOM/伪DOM自定义事件
一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...
- 转: JS自定义事件的定义和触发(createEvent, dispatchEvent)
四.伪DOM自定义事件 这里的“伪DOM自定义事件”是自己定义的一个名词,用来区分DOM自定义事件的.例如jQuery库,其是基于包装器(一个包含DOM元素的中间层)扩展事件的,既与DOM相关,又不直 ...
- 为WebBrowser的WEB页的Document注册事件的问题
原文:为WebBrowser的WEB页的Document注册事件的问题 当使用WebBrowser,并对其装载的Web页建立Document的事件后,WebBrowser里的页面元素都变得难于操作了, ...
- 如何模拟click事件,打开一个a标签链接?
在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截. ...
- js模拟点击事件实现代码
js模拟点击事件实现代码 类型:转载 时间:2012-11-06 在实际的应用开发中,我们会常常用到JS的模事件,比如说点击事件,举个简单的例子,点击表单外的"提交"按钮来提交表单 ...
- CDI services--Event(事件)
Cdi中的event事件,是整个CDI的精华所在之一.其有点类似设计模式中的观察者模式.但也有不同的地方.如下3点: 不仅是生产者(producers)从观察者(observers)解耦.观察者也从生 ...
随机推荐
- 数据可视化——阿里云解决方案DataV
数据可视化——阿里云解决方案DataV https://help.aliyun.com/document_detail/53844.html?spm=a2c4g.11186623.6.579.37fd ...
- jar包通过exe4j打包成exe可执行文件
https://blog.csdn.net/jia611/article/details/42060945 参照此文即可,注意,我的是maven打包成的jar,选择maincalss时,需要选择jar ...
- esp32固件烧录
正常使用IO0置空即可.烧录时需要en引脚接高电平,IO0接地,使用乐鑫的烧录工具烧录即可.注意如果启用wifi,供电一定要不小于500ma,普通的usb转ttl模块无法满足wifi启动的,被坑的好惨 ...
- VUE-011-通过 v-if 和 v-for 实现特定值的列表循环匹配,并显示满足匹配条件的值
前端页面开发过程中,经常遇到服务端返回的数据中,存在一些需要转义的表单项.比如,员工信息中的学历,假设研究生学历的代码是101(或10001),则数据库中对应字段存放的是 101(或10001),而非 ...
- 温习排序算法(基于C指针)
以前学过的数据结构课,貌似已经忘得一干二净了,偶然又翻起,书中最后一章详细介绍了7种排序算法,现在对其中4种做个总结.(为啥只总结4种,当然是因为偷懒,只想总结简单又常用的!) 先贴一张排序分类图: ...
- Angular系列文章之angular路由
路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分. 那么,对于angular而言,它自然也有内置的路由模块:叫做ngRoute. ...
- [svc]tcp三次握手四次挥手&tcp的11种状态(半连接)&tcp的time-wait
TCP的状态转化过程(11种状态)以及TIME_WAIT状态 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 我相信很多都遇到过这个问题.一旦有用户在喊:网络变慢了.第一件事情就 ...
- 什么是span?跨径
研究zipkin时候,发现有个span的概念 https://segmentfault.com/a/1190000012342007
- jq中get()和eq()的区别
一直弄混淆的获取元素的方法,现整理一下: :eq(index) 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 如:$(& ...
- MySQL建表 TIMESTAMP 类型字段问题
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT ...