【问题标题】:.How can I spread my text over multiple jtextpanes?.如何将我的文本分布在多个 jtextpanes 上?
【发布时间】:2019-04-19 11:49:40
【问题描述】:

我正在用 java 构建一个简单的文字编辑器。目前,一切正常。现在我想创建“页面”,就像在 word 中一样。代表页面的 JTextPane 应该检查它是否已满,然后在其下创建一个新的 JTextpane。使用滚动条,我将能够在它们之间滚动。到目前为止,这不会有问题。但是,所有页面都应该属于一个文档,如果我要删除假设第 2 页上的一行,则每隔一页上的每一行都会向上移动。 (例如)有没有一种简单的方法可以做到这一点,或者我必须为每个 JTextPane 创建 DocumentListeners,每次更改都更改所有内容?另外,有没有办法将选择扩展到多个页面?

就我个人而言,我还没有尝试过任何事情,因为在将自己写到角落之前我想要一些提示。我认为我可以使页面不可编辑,而是使用 caretListener 来检查用户单击的位置,以编辑包含实际文档的不可见无限 JTextPane,它将其内容写入可见页面。

【问题讨论】:

    标签: java swing jtextpane


    【解决方案1】:

    很多未知数,但也许以下内容会让你有所思考。

    所有页面都应该属于一个文档,

    同意。

    代表页面的 JTextPane 应该检查它是否已满,然后在其下创建一个新的 JTextpane

    也许将每个文本窗格添加到 JScrollPane,但不显示滚动窗格的滚动条或边框。

    如果我要删除第 2 页上的一行,则每隔一页上的每一行都会向上移动

    您需要手动控制每个滚动窗格的视口。第一页会将视口定位在偏移量 0 处。下一页会将视口定位在代表页面高度的偏移量处。

    然后,对 Document 的任何更改都应自动反映在所有文本窗格中。

    您可能还需要使用setAutoScrolls(false) 来防止视口在您拖动鼠标时滚动。

    有没有办法将选择扩展到多个页面?

    选择是文本窗格的属性,而不是文档。

    不确定当您尝试将鼠标从一个文本窗格拖动到另一个文本窗格时会发生什么。

    我猜你可能需要一些特殊的逻辑。也许使用 mouseEntered/Exited 事件来触发这种类型的处理。

    【讨论】:

    • 看了问题后我做了一个粗略的测试,和你描述的解决方案非常相似。 “下一页会将视口定位在代表页面高度的偏移处”代表了另一个挑战:如何划分内容以使其看起来不错(例如避免在页面顶部或底部显示半行)。
    • @c0der,我建议会有很多未知数。关于半行,您可以使用viewToModel(...) 方法根据(建议的)高度获取行首字符的偏移量。然后,您将使用 modelToView(...) 方法获取由该字符表示的真实矩形并调整高度以完全显示该字符。
    猜你喜欢
    • 2016-11-26
    • 2012-12-08
    • 2011-09-09
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多