java - 自定义 JEditorPane 行为

标签 java swing jeditorpane

各位程序员大家好!

我有一个 JEditorPane,用户应该在其中输入由分号分隔的一系列数字(具有可选不确定性的数量),例如:

3.0; 5.8; 70+-5; ...

然后将该列表映射到包含已解析数量的 ArrayList 包装器。

我想为输入 Pane 实现特定行为。例如按“;”或者 ' 应该插入 '; ',在 ';' 之间按退格键/删除键和 ' ' 应该删除它们并组合分开的数字。剪切和粘贴也有特定的行为,等等。我希望它用户友好且直观。

我试过DocumentFilter ,但它似乎太简单了,它可能会弄乱插入符/选择。所以我想写自己的StyledEditorKit子类,但有 Actions 的负载实现和很多技术细节,我不确定。

我该如何处理?有没有办法不用从头开始编写 EditorKit 来做到这一点?

最佳答案

首先,我不会为此使用 JEditorPane。 JEdi​​torPane 用于显示 HTML。使用 JTextArea 或 JTextPane 会容易得多,因为它们只包含文本,无需担心标签。

I tried DocumentFilter, but it seems to be too simple and it can mess up caret/selection.

DocumentFilter 被设计为供多个文档使用,因此对您正在使用的实际文本组件一无所知。如果您想控制插入符位置,那么您需要将文本组件作为参数传递给您的 DocumentFilter 类。

pressing ';' or ' ' should insert '; ',

如果您不喜欢 DocumentFilter,那么也许您可以使用键绑定(bind)并处理 keyTyped 事件

pressing backspace/delete between ';' and ' ' should erase both

文档过滤器应该可以工作,或者您可以再次使用键绑定(bind)。关于退格键的注意事项我相信您需要处理 Ctrl+H。

Cuts and pastes also have specific behaviour

DocumentFilter 不会导致更新文档(即用户键入或用户粘贴)。您可以尝试覆盖文本组件的剪切/复制/粘贴方法。

So I thought about writing my very own StyledEditorKit subclass, but there's a load of Actions to implement

同意,我认为这太过分了。

关于java - 自定义 JEditorPane 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46239438/

相关文章:

java - 如何告诉编译器两个对象属于相同但未知的类(带有泛型)?

java - 如何使用 Spring JPA 声明 CHECK 约束?

Java getInputStream 读取不退出

java - 将图像添加到 JOptionPane

java - 如何将 HTMLDocument 分配到 JEditorPane 中以作为源代码进行修改?

java - 为什么线程在我的例子中没有被饿死

java - 为什么我的屏幕上什么也没有绘制?

java - AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException : -1

java - JEdi​​torPane 未检测到 <a> 标签,而是将它们放入我的字符串中

java - 在 JEditorPane 中高亮一个词