我应该为什么 JEditorPane 事件创建侦听器?
假设我在 JPanel 中有一个 JEditorPane。 我希望每次用户在 JEditorPane 组件中输入/粘贴文本时都能够执行回调。 我应该创建什么类型的侦听器?
Suppose I have a JEditorPane in a JPanel. I want to be able to execute a callback each time the user enters/pastes text in the JEditorPane component. What type of listener should I create?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 DocumentListener 来通知文档的任何更改。
由于我还不能发表评论,我只想说,尽可能使用侦听器比覆盖类更好,就像上面给出的覆盖 PlainDocument 的示例一样。
侦听器方法适用于 JTextField、JTextArea、JEditorPane 或 JTextPane。 默认情况下,编辑器窗格使用 HTMLDocument,而 JTextPane 使用 StyledDocument。 因此,通过强制组件使用 PlainDocument,您将失去功能。
如果您关心的是在将文本添加到文档之前对其进行编辑,那么您应该使用 文档过滤器
You can use a DocumentListener to be notified of any changes to the Document.
Since I can't yet leave comments, I would just like to say that it is better to use listeners when possible than it is to override a class, like the example given above that overrides the PlainDocument.
The listener approach will work on a JTextField, JTextArea, JEditorPane or JTextPane. By default an editor pane uses a HTMLDocument and a JTextPane uses a StyledDocument. So you are losing functionality by forcing the component to use a PlainDocument.
If your concern is about editing the text before it is added to the Document, then you should be using a DocumentFilter
执行此操作的一种方法是创建自定义 Document 并重写 insertString 方法。 例如:
这允许您找出插入的内容并根据需要否决它(通过不调用 super.insertString)。 您可以使用以下方法应用本文档:
One way of doing this is to create a custom Document and override the insertString method. For example:
This allows you to find out what is inserted and veto it if you wish (by not calling super.insertString). You can apply this document using this:
在 DocumentEvent 界面中,您有诸如 getOffset() 和 getLength() 之类的方法,您可以使用它们来检索实际的更改。
希望这对您有帮助
In the DocumentEvent interface, you have methods like getOffset() and getLength() which you could use to retrieve the actual change.
Hopes this helps you