【问题标题】:Custom JEditorPane behaviour自定义 JEditorPane 行为
【发布时间】:2017-09-15 22:34:30
【问题描述】:

各位程序员们好!

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

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

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

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

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

我该如何处理?有没有什么办法不用从头写EditorKit?

【问题讨论】:

    标签: java swing jeditorpane


    【解决方案1】:

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

    我尝试了 DocumentFilter,但它似乎太简单了,并且可能会弄乱插入符号/选择。

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

    按';'或 ' ' 应该插入 '; ',

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

    在“;”之间按退格/删除和 ' ' 应该都删除

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

    剪切和粘贴也有特定的行为

    DocumentFilter 不是更新 Document 的原因(即用户输入或用户粘贴。您可以尝试覆盖文本组件的剪切/复制/粘贴方法。

    所以我考虑编写自己的 StyledEditorKit 子类,但是要实现大量的 Action

    同意,我认为这是矫枉过正。

    【讨论】:

    • 我选择了 JEditorPane,因为我想要某种“语法高亮”,但我稍后会做。也许我会使用Highlighter。我会考虑是否可以专门使用 DocumentFilter 来完成这项工作。感谢您提到 Key Bindings,我还没有考虑过它们。
    • 使用 HTML 很痛苦。使用带有属性的 JTextPane 来突出显示文本更容易。简单示例:stackoverflow.com/questions/43284451/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2012-02-20
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多