我正在用Java构建一个简单的单词编辑器。目前,一切正常。现在,我想用文字创建“页面”。表示Page的JTextPane应该检查它是否已满,然后在其下创建一个新的JTextpane。使用滚动条,我可以在它们之间滚动。到目前为止,这不会有问题。但是,所有页面都应该属于一个文档,如果我要删除第2页上的一行,那么每隔一页上的每一行都会上移。 (例如)是否有简单的方法来执行此操作,还是我必须为每个JTextPane创建DocumentListeners并在每次更改时都进行更改?另外,有没有办法将选择范围扩展到多个页面?
我个人到目前为止还没有尝试过任何东西,因为在将自己写到角落之前,我需要一些技巧。我以为我可以使页面不可编辑,而可以使用caretListener来检查用户单击的位置,以编辑包含实际文档的不可见的无限JTextPane,它将其内容写入可见页面。
答案 0 :(得分:0)
很多未知因素,但也许以下内容会给您一些思考。
所有页面应属于一个文档
同意。
代表Page的JTextPane应该检查它是否已满,然后在其下创建一个新的JTextpane
也许将每个文本窗格添加到JScrollPane,但是不显示滚动条或滚动窗格的边框。
如果我要删除第2页上的一行,那么每隔一页上的每一行都会上移
您需要手动控制每个滚动窗格的视口。第一页将视口定位在偏移0处。下一页将视口定位在代表页面高度的偏移处。
然后,对文档的任何更改应自动反映在所有文本窗格中。
您可能还需要使用setAutoScrolls(false)
来防止视口在拖动鼠标时滚动。
是否可以将选择范围扩展到多个页面?
选择是文本窗格的属性,而不是文档的属性。
当您尝试将鼠标从一个文本窗格拖到另一个文本窗格时,不确定会发生什么。
我猜您可能需要一些特殊的逻辑。也许使用mouseEntered / Exited事件来触发这种类型的处理。