zoukankan      html  css  js  c++  java
  • java中监听document的变化

     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 + "
    ");
    38                 msg.append("插入文本的起始位置:" + offset + "
    ");
    39             }
    40 
    41             @Override
    42             public void insertUpdate(DocumentEvent arg0) {
    43                 int offset = arg0.getOffset();
    44                 int len = arg0.getLength();
    45                 msg.append("插入文本的长度:" + len + "
    ");
    46                 msg.append("插入文本的起始位置:" + offset + "
    ");
    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 List按照对象的属性进行分组
    postgresql数据库大量锁表的问题解决
    postgresql 并发update下导致的死锁问题
    Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener
    Spring Cloud(一):入门篇
    Spring Boot 2.X(九):Spring MVC
    Spring Boot 2.X(八):Spring AOP 实现简单的日志切面
    Spring Boot 2.X(七):Spring Cache 使用
    Spring Boot 2.X(六):Spring Boot 集成 Redis
    Spring Boot 2.X(五):MyBatis 多数据源配置
  • 原文地址:https://www.cnblogs.com/baorantHome/p/7050721.html
Copyright © 2011-2022 走看看