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)解耦.观察者也从生 ...
随机推荐
- 面向面试编程代码片段之GC
x 代码 using System; using System.Threading; public static class Program{ public static void Main(){ T ...
- 读高性能MySql笔记
1.1 MySQL逻辑架构 MySql服务器逻辑架构图 1.连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者 ...
- 《图解HTTP》读书笔记(五:HTTP报文结构)
用于 HTTP 协议交互的信息被称为 HTTP 报文. 请求端(客户端) 的HTTP 报文叫做请求报文, 响应端(服务器端) 的叫做响应报文.HTTP 报文本身是由多行(用 CR+LF 作换行符) 数 ...
- table-cell width:1% 深入理解
问题描述 今天在使用Bootstrap给页面添加底部导航栏时,需要在手机下也使导航栏呈现水平排列的效果.最后在网上查找解决方法是,看到这样一个解决方法: .nav-justified > li ...
- encodeURIComponent 和 decodeURIComponent 对字符串url编码 用于url拼字符传值
- svg合并
假如页面有多个svg图标要加载,多次加载不利,可将多个svg合并为一个加载 如下有两个svg <svg xmlns="http://www.w3.org/2000/svg" ...
- Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
很长的报错,截取 ERROR c.a.d.p.DruidDataSource - discard connection com.mysql.jdbc.exceptions.jdbc4.Comm ...
- vs2015官方下载链接
https://my.visualstudio.com/Downloads?q=visual%20studio%202015&wt.mc_id=o~msft~vscom~older-downl ...
- FB面经 Prepare: Make Parentheses valid
给一组括号,remove最少的括号使得它valid 从左从右各scan一次 package fb; public class removeParen { public static String fi ...
- JavaIO流——简单对文件的写入及读取(二)
前文对Io字符流的输入进行了介绍,在这就不再讲了,简单的来写该怎么读取文件内容吧 public static void readFile(String Filename) throws IOExcep ...