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 }
  • 相关阅读:
    ASP.NET AJAX异步调用Web Service和页面中的类方法< 收藏>
    WebCast下载工具iReaper
    ASP.NET AJAX Control Toolkit
    CodeSmith对数据库中表的操作(转)
    仿163网盘无刷新多文件上传系统<转>
    疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 操作权限《转》
    TFS2010物理迁移
    Extensible Storage Engine
    改善ASP.NET MVC应用程序第一次启动性能问题
    Windows Server 2012添加WORKGROUPS Windows Server 2008 R2服务器
  • 原文地址:https://www.cnblogs.com/baorantHome/p/7050721.html
Copyright © 2011-2022 走看看