java中监听document的变化
2017-06-19 21:37
344 查看
1 package com.baorant; 2 3 import java.awt.event.KeyAdapter; 4 import java.awt.event.KeyEvent; 5 import java.util.LinkedList; 6 7 import javax.swing.Box; 8 import javax.swing.BoxLayout; 9 import javax.swing.JFrame; 10 import javax.swing.JLabel; 11 import javax.swing.JPanel; 12 import javax.swing.JScrollPane; 13 import javax.swing.JTextArea; 14 import javax.swing.event.DocumentEvent; 15 import javax.swing.event.DocumentListener; 16 import javax.swing.text.BadLocationException; 17 import javax.swing.text.Document; 18 import javax.swing.undo.UndoableEdit; 19 20 public class JavaDemo { 21 JFrame mainWin = new JFrame("监听Document对象"); 22 JTextArea target = new JTextArea(4, 25); 23 JTextArea msg = new JTextArea(5, 35); 24 JLabel label = new JLabel("文本域的修改信息"); 25 Document doc = target.getDocument();// 获得区域内的document对象 26 LinkedList<UndoableEdit> undoList = new LinkedList<>(); 27 final int UNDO_COUNT = 20; 28 29 public void init() { 30 msg.setEditable(false); 31 doc.addDocumentListener(new DocumentListener() { 32 33 @Override 34 public void removeUpdate(DocumentEvent arg0) { 35 int offset = arg0.getOffset(); 36 int len = arg0.getLength(); 37 msg.append("插入文本的长度:" + len + "\n"); 38 msg.append("插入文本的起始位置:" + offset + "\n"); 39 } 40 41 @Override 42 public void insertUpdate(DocumentEvent arg0) { 43 int offset = arg0.getOffset(); 44 int len = arg0.getLength(); 45 msg.append("插入文本的长度:" + len + "\n"); 46 msg.append("插入文本的起始位置:" + offset + "\n"); 47 try { 48 msg.append("插入文本内容:" + doc.getText(offset, len)); 49 } catch (BadLocationException evt) { 50 evt.printStackTrace(); 51 } 52 } 53 54 @Override 55 public void changedUpdate(DocumentEvent arg0) { 56 // TODO Auto-generated method stub 57 58 } 59 }); 60 doc.addUndoableEditListener(e -> { 61 UndoableEdit edit = e.getEdit(); 62 if (edit.canUndo() && undoList.size() < UNDO_COUNT) { 63 undoList.add(edit); 64 } else if (edit.canUndo() && undoList.size() >= UNDO_COUNT) { 65 undoList.pop(); 66 undoList.add(edit); 67 } 68 }); 69 target.addKeyListener(new KeyAdapter() { 70 @Override 71 public void keyTyped(KeyEvent e) { 72 if (e.getKeyChar() == 26) { 73 if (undoList.size() > 0) { 74 undoList.removeLast().undo(); 75 } 76 } 77 } 78 }); 79 Box box = new Box(BoxLayout.Y_AXIS); 80 box.add(new JScrollPane(target)); 81 JPanel panel = new JPanel(); 82 panel.add(label); 83 box.add(panel); 84 box.add(new JScrollPane(msg)); 85 mainWin.add(box); 86 mainWin.pack(); 87 mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 88 mainWin.setVisible(true); 89 } 90 91 public static void main(String[] args) { 92 new JavaDemo().init(); 93 } 94 }
相关文章推荐
- Java Swing JTable 表格【7:监听表格数据变化】
- 【java】事件监听——通过点击不同的按钮,让面板的背景色发生相应的变化
- [Java学习小记]使用PropertyChangeSupport来监听变量的变化
- Java利用WatchService监听文件变化示例
- 好记性不如烂笔头42-javaWeb监听对象域属性变化(6)
- java开发gui教程之jframe监听窗体大小变化事件和jframe创建窗体
- JAVA监听磁盘文件状态的变化
- 关于android广播包监听网络状态变化收到java.lang.NullPointerException: Error receiving broadcast Intent
- inotify-java linux系统监听文件发生变化,实时通知java程序
- Java event事件监听属性值变化 demo
- 通过JMS监听Oracle AQ,在数据库变化时触发执行Java程序
- java基础学习总结——监听当数据发生变化时要做的操作
- java监听数据库某张表变化,当插入数据后将数据显示到页面
- java 自定义监听器监听属性变化
- JAVA 项目监听文件是否发生变化
- java HttpSessionListener监听在线人数操作session
- 实时监听输入框值变化的完美方案:oninput & onpropertychange
- java.lang.IllegalArgumentException:Document base ……does not exist or is not a readable directory错误的解决方案
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- JAVA事件处理,和事件监听机制