自定义 JEditorPane 行为

Custom JEditorPane behaviour

各位程序员大家好!

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

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

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

我想为输入窗格实现特定行为。例如按';'或 ' ' 应插入 '; ',在 ';' 之间按 backspace/delete和 ' ' 应该擦除它们并合并分隔的数字。剪切和粘贴也有特定的行为,等等。我希望它对用户友好且直观。

我尝试 DocumentFilter, but it seems to be too simple and it can mess up caret/selection. So I thought about writing my very own StyledEditorKit subclass, but there's a load of 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 class.

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

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

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

DocumentFilter 应该可以工作,或者您可以再次使用键绑定。注意退格键我相信你需要处理 Ctrl+H.

Cuts and pastes also have specific behaviour

DocumentFilter 不会成为更新文档的原因(即用户键入或用户粘贴。您可以尝试覆盖文本组件的 cut/copy/paste 方法。

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

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