我有一个如下所示的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
将包括JLabel
,JCheckBox
和JTextArea
。