MS Word喜欢页面管理

时间:2012-09-29 22:28:08

标签: java swing jpanel

这更像是一个逻辑问题/解释。

我有一个类似于MS Wrod的文本编辑程序。它的文档由页面组成。

一页是保存页面内容的JPanel(A)。在JPanel(A)页面内容上添加了其他JPanels(B)。页面的最后一个元素始终是填充所有未占用空间的填充程序。

我要做的是管理JPanel(B)迁移。当页面被填充时,最后一个应该被移动到下一个页面上,当页面上释放空间时,我必须检查下一个元素的第一个元素是否适合该空间并将其向上移动。

我尝试使用附加到Filler的组件侦听器来实现这一点。 如果填充物高度达到零,则页面已满,如果它放大,则从页面中删除元素(或其高度降低)。

看起来相当简单,但存在一些问题。 JPanels(B)的大小不一样。

这意味着,当从页面中删除JPanel(B)时,不止一个JPanel(B)来自 下一页可能适合该空间。这也意味着如果页面的第一个JPanel(B)的高度减小,它也可能适合上一页(如果它的新高度小于prevous页面的Filler上的高度),也许如果减少是足够大,下一页的更多JPanels(B)可以附加到当前。

考虑到所有这些因素,可以基于此编写大量代码。但这一切都非常笨拙,因为它都是在组件监听器内完成的。

移动JPanels(B)会触发上一页/下一页的组件监听器。我可以通过在执行侦听器代码时添加一个布尔值设置为true来避免这种情况,并使侦听器仅在该布尔值为false时运行,但是根本不调用其他页面侦听器,这不再是好事,它们必须是最后调用。

我还想在这里添加一个子问题:如果我从另一个监听器调用一个监听器,它会运行immediatley还是在监听器完成之后?如果答案是在之后,如果我不止一次调用它,它会只运行一次或几次吗?如果从自身调用侦听器怎么办?

我的主要问题是,有没有一种方法可以在Java中以更简单的方式实现这种类似Word的页面内容管理?以某种方式创建了一组组件,它们以自动管理所有这些的方式排列(在JTextArea中自动换行)?

我只是Java和Swing的初学者,所以也许有一些组件可以用于此,或者当几个组合在一起时可能就像这样? 也许管理了一些布局?

如果我创建一些高JPanel,我可以增加/减少它的高度,具体取决于页码,也许我可以添加一些垂直条带作为分隔符,如果在它之前添加一个组件,如果它的高度是空间留给分隔符的空间越大,它会自动放到它之后吗?这样我就可以创造一种页面错觉。

这些只是一些想法,我希望其中一些是可能的,或者有人有更好的解决方案......

1 个答案:

答案 0 :(得分:5)

这就是答案 java-sl.com/articles.html在这里阅读4篇关于分页的文章