首页 > 解决方案 > .如何将我的文本分布在多个 jtextpanes 上?

问题描述

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

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

标签: javaswingjtextpane

解决方案


很多未知数,但也许以下内容会给你一些思考。

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

同意。

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

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

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

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

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

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

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

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

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

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


推荐阅读