java实用教程——组件及事件处理——DocumentEvent事件
DocumentEvent事件源:
文本区Document的维护
注册监视器:
使用addDocumentListener(DocumentListener listen)为事件源添加监视器
DocumentListener接口:
接口中有三个方法:
public void changUpdate(DocumentEvent e);
public void removeUpdate(DocumentEvent e);
public void insertUpdate(DocumentEvent e);
在下面的例子9 (运行效果如图9.12所示)将用户排序单词一个文本区输入的单词按字典序排序后放入另一个文编辑区,实现如下功能:
用户在窗口(WindowDocument类负责创建)中的一个文本区inputArea内编辑单词,
触发DocumentEvent事件,监视器textListener(TextListener类负责创建)通过处理该事件将该文本区的单词排序,并将排序结果放入另一个文本区showTextArea 中,
即随着文本区inputArea内容的变化,另一个文本区showTextArea不断地更新排序。
1.用户选择名字为“复制©”copy的菜单项触发ActionEvent 事件,监视器handie(Handlel istener类负责创建)将用户在showTextArea选中的文本复制到剪贴板。
2.用户选择名字为“剪切(T)”的菜单项触发ActionEvent事件,监视器hande( HandleListener类负责创建)将用户在showTextArea选中的文本剪切到剪贴板。
3.用户选择名字为“粘贴§” 的菜单项的按钮触发ActionEvent事件,监视器handle(HandleListener类负责创建)将剪贴板的内容粘贴到inputArea,
public class Example9_9 {public static void main(String args[]) {WindowDocument win=new WindowDocument();win.setBounds(100,100,890,400);win.setTitle("排序单词");}}
;import java.awt.*;
import javax.swing.*;
import javax.swing.text.Document;
public class WindowDocument extends JFrame { /*** */private static final long serialVersionUID = -4158929136133563216L;
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(10,28);showText = new JTextArea(10,28);showText.setLineWrap(true); //文本自动回行showText.setWrapStyleWord(true); //文本区以单词为界自动换行Font font = new Font("宋体",Font.PLAIN,25);inputText.setFont(font);showText.setFont(font);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.setView(this); handleListener.setView(this);Document document =inputText.getDocument();//获取输入区的文档,放入Document中document.addDocumentListener(textChangeListener);//向文档注册监视器itemCopy.addActionListener(handleListener); //向菜单项注册监视器itemCut.addActionListener(handleListener);itemPaste.addActionListener(handleListener);}
}
import java.awt.event.*;
public class HandleListener implements ActionListener {WindowDocument view;public void setView(WindowDocument view) {this.view = view;}public void actionPerformed(ActionEvent e) {String str=e.getActionCommand(); if(str.equals("copy"))view.showText.copy();else if(str.equals("cut"))view.showText.cut();else if(str.equals("paste"))view.showText.paste();}
}
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
import java.util.Arrays;
public class TextListener implements DocumentListener {WindowDocument view;public void setView(WindowDocument view) {this.view = view;}public void changedUpdate(DocumentEvent e) {String str=view.inputText.getText(); //空格、数字和符号(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)组成的正则表达式:String regex="[\\s\\d\\p{Punct}]+"; String words[]=str.split(regex); Arrays.sort(words); //按字典序从小到大排序view.showText.setText(null); for(int i=0;i<words.length;i++)view.showText.append(words[i]+",");}public void removeUpdate(DocumentEvent e) { changedUpdate(e);}public void insertUpdate(DocumentEvent e) { changedUpdate(e);}
}
java实用教程——组件及事件处理——DocumentEvent事件相关推荐
- java实用教程——组件及事件处理——ActionEvent事件
事件源: 文本框,按钮,菜单项,密码框,单选按钮 注册监视器: 能够触发ActionEvent事件的组件使用方法 addActionListener(ActionListener listener) ...
- java实用教程——组件及事件处理——MouseEvent事件
MouseEvent事件 任何组件上都可以发生鼠标事件,如鼠标进入组件.退出组件.在组件上方单击鼠标.拖动鼠标等都触发鼠标事件,即导致MouseEvent类自动创建一个 事件对象,事件源注册监视器的方 ...
- java实用教程——组件及事件处理——ItemEvent事件(设置字体类型)
ItemEvent事件源: 选择框,下拉列表都可以触发ItemEvent事件 注册监视器: 能够触发ItemEvent事件的组件使用addItemListener(ItemListener liste ...
- java实用教程——组件及事件处理——对话框(消息对话框,输入对话框,确认对话框)
消息对话框:(这个对话框提供一些信息) 无模式:可多线程的执行 有模式:用户必须处理这个一个对话框.必须解决这个问题后才可以继续相处下去 对话框分为无模式和有模式两种.如果一个对话框 是有模式的对话框 ...
- java实用教程——组件及事件处理——对话框(dialog)
对话框: import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.awt.*; impo ...
- java实用教程——组件及事件处理——布局的一个小实例
import javax.swing.*; import java.awt.*;public class BasicComponentDemo {Frame frame = new Frame(&qu ...
- java实用教程——组件及事件处理——布局管理(五种)
1.流式布局FlowLayout public void pack()调整此窗口的大小,以适合其子组件的首选大小和布局.如果该窗口或其所有者仍不可显示,则两者在计算首选大小之前变得可显示.在计算首选大 ...
- java实用教程——组件及事件处理——设置组件的位置(相对于窗口具体位置和布局)
1: 相对于窗口的具体位置 关键点: JButton组件添加到JPanel时,如果想自己位置,需要对JPanel进行如下设置,才能自定义按钮位置 需要将组件添加到画板上去,才可以设置组件的相对具体位置 ...
- java实用教程——组件及事件处理——对话框(颜色对话框,自定义对话框)
颜色对话框: 可以用javax.swing包中的JColorChooser类的静态方法 public staticColorshowDialog (Component component, Strin ...
最新文章
- 使用TensorFlow的基本步骤
- redis主从架构宕机问题手动解决
- Linux命令行模式下的复制和粘贴以及停止命令刷新
- Spark读写Hbase的二种方式对比
- Docker-compose 常用命令及网络设置(五)
- 栈——后缀表达式(洛谷 P1449)
- Android基础教程(四)之------获取手机联系人信息
- at.allow与at.deny及cron.allow与cron.deny优先级的比较
- 关于WINDOWS超级终端的使用来调试MODEM 串口
- Java尚能饭否?10月编程排行榜告诉你!
- oracle 裸设备使用方法,Linux上如何使用裸设备
- Error response from daemon: Container XXX is restarting, wait until the container is running
- disallow api.php,爬虫之robots.txt
- 创业过程中不要被理想主义所牵绊
- iOS开发--AVFoundation进行视频合成, 导出结果旋转90度问题
- Echarts饼图字体颜色
- 研究报告 | “洗剪吹”市场逆势增长,黑马突围捷登三大电商平台销量榜首
- 性别识别_文字性别识别_语音性别识别 - 云+社区 - 腾讯云
- 摄像头参数介绍 ———— 信噪比(SNR)
- python alipay接口文档参考注解
热门文章
- 复习深入笔记02:魔法方法/cookie,session,token/异常
- java起源英文_Abbreviation 英文词组缩写(来源:南阳理工大学ACM)java
- 【CASS精品教程】CASS9.1等高线的绘制完整案例教程
- Android之getCacheDir()和getFilesDir()方法区别
- 五、Web App 基础可视组件属性(IVX 快速开发教程)
- 计算机模拟考总结,高职单考单招计算机模拟一技术总结.doc
- access函数_ACCESS中的DLookUp函数是如何运算的?
- 渣男劈腿,两个女生逼他做出选择,结果......
- 地球不是圆的,别让教科书限制了孩子的想象力!
- 揭秘神仙高校的课堂!网友跪了:这就是差距啊!