如何从DocumentListener获取添加,删除或更改的字符?

时间:2009-10-04 19:44:47

标签: java swing jtextcomponent

我有JTextAreas并且需要获取字符,这些字符被添加,删除或更改为它。我该怎么做?

4 个答案:

答案 0 :(得分:1)

添加很简单,只需使用DocumentListener即可。

要处理添加和删除,您可以使用DocumentFilter。我相信当你添加/删除文本时都会调用replace()方法。

编辑:

不会在删除时调用DocumentFilter。因此,了解删除(除了保留重复的文档)的唯一方法是创建自定义文档并覆盖remove(...)方法。然后,您可以在从文档中删除字符串之前提取它。

答案 1 :(得分:0)

您可以获取偏移量和长度(甚至是源Document),因此可以从中读取字符。如果您想查看删除的字符是什么,您必须保留文档内容的副本。

Swing文档应该是线程安全的(呵呵)。但是如果在其他线程中发生了多次更改(事件总是在EDT上触发,只是为了让事情更有趣),那么字符数据可能不是最新的。关于这一点,你无能为力。甚至其他事件监听器也可能最终间接地改变文档内容。

通常,使用事件的简单方法是完全忽略事件对象。您需要知道的只是您正在收听的对象中的某些内容(可能已更改)。这应该为您提供健壮且易于理解的代码。如果你真的需要处理这些变化,那么camickr提到的DocumentFilter是自swingall.jar以来添加到Swing中的有用的东西(除了更好的原生L& F保真度)。

(注意,许多人无法阅读DocumentListener.changedUpdate的文档 - 它适用于属性更改,而不适用于字符。)

答案 2 :(得分:0)

let iSO8601DateFormatter = ISO8601DateFormatter()
let string = iSO8601DateFormatter.string(from: Date()) //2019-12-04T08:23:27Z
let date = iSO8601DateFormatter.date(from: string)  //nil ?

答案 3 :(得分:0)

@Override
public void insertUpdate(DocumentEvent e) {
    Document document = e.getDocument();

    int offset = e.getOffset();
    int length = e.getLength();

    try {
        String changedTxt = document .getText(offset, length);
    } catch (BadLocationException ex) {
        Logger.getLogger(EditorListener.class.getName()).log(Level.SEVERE, null, ex);
    }
}