在JTextPane中查找已删除的文本

萨钦·库玛(Sachin Kumar)

我正在使用JTextPane学习Java中的DocumentListener我正在尝试获取当前在文本窗格中插入/删除的当前字符串或单词(文本)我已经试过了:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.text.*;

class ChangeEffect implements DocumentListener {
    @Override
    public void insertUpdate(DocumentEvent de) {
        int offset = de.getOffset();
        try {
              String str = de.getDocument().getText(offset,de.getLength());
              System.out.println("You entered the text: " + str);
        }catch(Exception e){e.printStackTrace();}
    }
    @Override
    public void changedUpdate(DocumentEvent de) {
    }
    @Override
    public void removeUpdate(DocumentEvent de) {
        try {
            String s  = de.getDocument().getText(de.getOffset(),de.getLength());
           System.out.println("Removed text is: " +s);
        }catch(Exception e){}
    }
}


public class MultiModeColor {
    private static void displayGUI() {
        JFrame frame = new JFrame("Demo");
        JTextPane text = new JTextPane();
        frame.add(text);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
        text.getDocument().addDocumentListener(new ChangeEffect());
    }

    public static void main(String[] arg) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                displayGUI();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

在上面的示例中,我得到了最近插入的文本,但是删除的文本什么也不显示(println语句中的消息除外)。
有什么方法可以从文档中获取最近删除的文本?

疯狂程序员

尝试使用DocumentFilter而不是DocumentListener您面临的主要问题是在DocumentListener事实发生后得到通知,这意味着到通知您的侦听器时,文本已被删除。

DocumentFilter另一方面得到第一通知...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class DocumentMonitor {

    public static void main(String[] args) {
        new DocumentMonitor();
    }

    public DocumentMonitor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JTextArea ta = new JTextArea(20, 20);
                ((AbstractDocument) ta.getDocument()).setDocumentFilter(new DocumentFilter() {

                    @Override
                    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
                        if (offset >= fb.getDocument().getLength()) {
                            System.out.println("Added: " + text);
                        } else {
                            String old = fb.getDocument().getText(offset, length);
                            System.out.println("Replaced " + old + " with " + text);
                        }
                        super.replace(fb, offset, length, text, attrs);
                    }

                    @Override
                    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
                        System.out.println("Added: " + text);
                        super.insertString(fb, offset, text, attr);
                    }

                    @Override
                    public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException {
                        System.out.println("Removed: " + fb.getDocument().getText(offset, length));
                        super.remove(fb, offset, length);
                    }

                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(ta));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

是的,这使用JTextArea,但是对于JTextPane...的过程相同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在JTextPane中查找已删除的文本

来自分类Dev

从合并复制中查找已删除的行

来自分类Dev

从列表中查找已删除的号码

来自分类Dev

从“已添加” /“已删除”列中仅查找活动项

来自分类Dev

使JTextPane中的JLable不可删除

来自分类Dev

在Word 2013中查找和删除文本

来自分类Dev

在Sql Server 2008中查找已删除的记录

来自分类Dev

如何在Laravel中仅查找已删除的行?

来自分类Dev

从R中的已处理文本中删除标签

来自分类Dev

如何在Vim中恢复已删除的文本

来自分类Dev

如何取消突出显示JTextPane中的文本

来自分类Dev

Swing GUI在JTextPane中附加彩色文本

来自分类Dev

在JTextPane中获取所选文本的标签

来自分类Dev

如何取消突出显示JTextPane中的文本

来自分类Dev

查找提交以在Azure Devops中查找一个非常旧的已删除文件

来自分类Dev

查找和删除标签XCode中的特定文本

来自分类Dev

找出QPlainTextEdit的已删除文本

来自分类Dev

在文本中查找单词,并在文本中将粗体和颜色设为已建立的单词:红色

来自分类Dev

查找并删除已打开但已删除的大文件

来自分类Dev

在电子邮件中查找文本并在Outlook 2010中删除此后的所有文本

来自分类Dev

在电子邮件中查找文本并删除Outlook 2013中之前的所有文本

来自分类Dev

如何在Windows 7和Windows 8.1中从回收站中查找已删除的数据?

来自分类Dev

如何查找和恢复已删除的项目?

来自分类Dev

如何使用git查找已删除的行?

来自分类Dev

查找已删除的唯一对的索引

来自分类Dev

按日期查找已删除的提交

来自分类Dev

查找HTML文件中已更改的文本字符串

来自分类Dev

使用字符串从字符串中删除文本以查找文本?

来自分类Dev

在文本文件中查找随机文本,然后在显示后将其删除 - PowerShell

Related 相关文章

  1. 1

    在JTextPane中查找已删除的文本

  2. 2

    从合并复制中查找已删除的行

  3. 3

    从列表中查找已删除的号码

  4. 4

    从“已添加” /“已删除”列中仅查找活动项

  5. 5

    使JTextPane中的JLable不可删除

  6. 6

    在Word 2013中查找和删除文本

  7. 7

    在Sql Server 2008中查找已删除的记录

  8. 8

    如何在Laravel中仅查找已删除的行?

  9. 9

    从R中的已处理文本中删除标签

  10. 10

    如何在Vim中恢复已删除的文本

  11. 11

    如何取消突出显示JTextPane中的文本

  12. 12

    Swing GUI在JTextPane中附加彩色文本

  13. 13

    在JTextPane中获取所选文本的标签

  14. 14

    如何取消突出显示JTextPane中的文本

  15. 15

    查找提交以在Azure Devops中查找一个非常旧的已删除文件

  16. 16

    查找和删除标签XCode中的特定文本

  17. 17

    找出QPlainTextEdit的已删除文本

  18. 18

    在文本中查找单词,并在文本中将粗体和颜色设为已建立的单词:红色

  19. 19

    查找并删除已打开但已删除的大文件

  20. 20

    在电子邮件中查找文本并在Outlook 2010中删除此后的所有文本

  21. 21

    在电子邮件中查找文本并删除Outlook 2013中之前的所有文本

  22. 22

    如何在Windows 7和Windows 8.1中从回收站中查找已删除的数据?

  23. 23

    如何查找和恢复已删除的项目?

  24. 24

    如何使用git查找已删除的行?

  25. 25

    查找已删除的唯一对的索引

  26. 26

    按日期查找已删除的提交

  27. 27

    查找HTML文件中已更改的文本字符串

  28. 28

    使用字符串从字符串中删除文本以查找文本?

  29. 29

    在文本文件中查找随机文本,然后在显示后将其删除 - PowerShell

热门标签

归档