自定义 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。 JEditorPane 用于显示 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
同意,我认为这太过分了。
各位程序员大家好!
我有一个 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。 JEditorPane 用于显示 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
同意,我认为这太过分了。