假设我在JPanel中有一个JEditorPane。我希望每次用户在JEditorPane组件中输入/粘贴文本时都能执行回调。我应该创建什么类型的听众?
答案 0 :(得分:4)
您可以使用DocumentListener通知Document的任何更改。
由于我还不能留下评论,我只想说最好在可能的情况下使用监听器而不是覆盖一个类,就像上面给出的覆盖PlainDocument的例子一样。
侦听器方法适用于JTextField,JTextArea,JEditorPane或JTextPane。默认情况下,编辑器窗格使用HTMLDocument,而JTextPane使用StyledDocument。因此,您通过强制组件使用PlainDocument来丢失功能。
如果您关注的是在将文字添加到文档之前编辑文本,那么您应该使用DocumentFilter
答案 1 :(得分:3)
执行此操作的一种方法是创建自定义Document并覆盖insertString方法。例如:
class CustomDocument extends PlainDocument {
@Override
public void insertString(int offset, String string, AttributeSet attributeSet)
throws BadLocationException {
// Do something here
super.insertString(offset, string, attributeSet);
}
}
这允许您找出插入的内容并根据需要否决它(通过不调用super.insertString)。您可以使用以下方法应用此文档:
editorPane.setDocument(new CustomDocument());
答案 2 :(得分:2)
在DocumentEvent界面中,您可以使用 getOffset()和 getLength()等方法来检索实际更改。
希望这有助于你