这更像是一个逻辑问题/讨论。
我有一个类似于 MS Wrod 的文本编辑程序。它的文档由页面组成。
一页是保存页面内容的JPanel (A)。在该 JPanel (A) 上添加页面内容,即其他 JPanel (B)。页面的最后一个元素始终是填充所有未占用空间的填充物。
我要做的是管理 JPanel (B) 迁移。当页面被填满时,最后一个应该移动到下一个,并且当页面上的空间被释放时,我必须检查下一个的第一个元素是否适合该空间并将其向上移动。
我尝试通过附加到 Filler 的组件侦听器来实现这一点。如果 Fillers 高度达到零,则页面已满,如果它放大,则从页面中删除(或降低其高度)元素。
看起来很简单,但也存在一些问题。JPanel (B) 的大小并不相同。
这意味着,当从页面中删除一个 JPanel (B) 时,来自下一页的多个 JPanel(B) 可能适合该空间。这也意味着如果页面的第一个 JPanel (B) 的高度减小了,它也可能适合前一页(如果它的新高度小于前一页的 Filler 上的高度),并且如果减小是足够大,可以将更多来自下一页的 JPanel (B) 附加到当前页面。
考虑到所有这些,可以在此基础上编写相当多的代码。但这一切都非常笨拙,因为这一切都是在组件侦听器中完成的。
移动 JPanel (B) 将触发上一页/下一页的组件侦听器。我可以通过在侦听器代码执行时将布尔值设置为 true 来避免这种情况,并使侦听器仅在该布尔值为 false 时才运行,但这根本不会调用其他页面侦听器,这又不好,它们必须是最后被调用。
我还想在这里添加一个子问题:如果我从另一个侦听器调用侦听器,它会立即运行还是在侦听器完成后运行?如果答案是之后,如果我多次调用它,它会只运行一次还是多次?如果从自身调用监听器怎么办?
我的主要问题是,有没有一种方法可以在 Java 中以更简单的方式实现这种类似 Word 的页面内容管理?以某种方式创建一组组件,这些组件以它们自动管理所有这些的方式排列(在 JTextArea 中类似于自动换行)?
我只是 Java 和 Swing 的初学者,所以也许有一些组件可以用于此,或者当几个组件正确组合在一起时会像这样?也许一些布局管理?
如果我创建一些高 JPanel,我可以根据页码增加/减少它的高度,也许我可以添加某种垂直条作为分隔符,如果在它之前添加了一个组件,如果它的高度大于留给分隔符的空间,它会自动放在它后面吗?这样我就可以创造出页面的错觉。
这些只是一些想法,我希望其中一些是可能的,或者有人有更好的解决方案......