我有JTextAreas并且需要获取字符,这些字符被添加,删除或更改为它。我该怎么做?
答案 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);
}
}