我有一个如下所示的GUI设置:



它显示一个文档,并使用户可以通过添加/删除其中的JTextAreas和文本来对其进行编辑。

尝试打开文档时出现问题。文档本身由彼此之上的JPanels层组成。 GUI中的单个点上的JPanels不得超过6层。

由于我不知道JTextArea的高度,因此我必须使其相对于父级(换句话说,不指定它)。

因为布局管理器(MigLayout)不知道组件的确切大小(相对于父组件而言),所以它首先向其父组件询问父组件的大小。该大小再次未知,并询问父级的父级,依此类推(直到1或2级JPanel)。最后,它必须询问很多组件的大小(仅在上面的示例中,MigLayout中的方法checkParent(Container)被调用了10万次以上)。

我需要做的是仅在打开文档时设置JTextArea(或它所在的JPanel)的高度,因此布局管理器不必询问JTextAreas父级,从而导致递归地狱。

打开文档后,我必须将高度重置为默认值(以便在添加/删除文本时调整高度)。

我绝对不知道如何执行此操作,或者如果要这样做,我只能确定上面描述的是问题所在。

几点注意事项:


这不是一个MigLayout错误,我去过论坛(下面的链接)
check this out (the last post)
我不能将JScrollPane放入JTextArea,因为它的任务不仅是保存信息,还在于准确显示需要多少空间
保存文档时,我可以很容易地得到JTextAreas的高度,因此当再次打开它时,可以随意使用它们


编辑:
在此问题中引用的文档不是JTextAreas和类似文档中使用的“文档”,而是程序中自定义类中的“文档”(我没有提及,因为它是无关紧要的,除非将其理解为“文献”)。

最佳答案

因为您的Document为分层结构建模,所以您需要一棵树。因为您的界面要求每个节点都具有控件和视图,所以您需要一个表。在here中看到的Outline可能是合适的选择。您的DocumentTreeModel将保留对文档根目录Element的引用,就像示例的FileTreeModel保留对根目录File的引用一样。您的RowModel将包括JLabelJCheckBoxJTextArea

07-24 15:40