GUI构建麻烦

时间:2013-04-05 21:21:34

标签: java swing miglayout

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

example

它会显示一个文档,并允许用户通过添加/删除JTextAreas和文本来编辑它。

尝试打开文档时遇到问题。文档本身由JPanels层组成。 GUI中的单个点上永远不会超过6层JPanels

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

因为布局管理器(MigLayout)不知道组件的确切大小(它相对于父组件),所以它首先要求其父组件查询父组件的大小。该大小再次未知,父母的父母被要求等等(直到1级或2级JPanel)。最后,它必须询问很多组件的大小(MigLayout中的方法checkParent(Container)被调用超过10万次,仅用于上面的示例。)

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

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

我绝对不知道如何做到这一点,或者如果这是要走的路,我只能确定我上面描述的是问题所在。

几点说明:

  • 这不是MigLayout错误,我去过论坛(链接如下)
  • check this out (the last post)
  • 我无法将JScrollPane放入JTextArea,因为它的任务不仅仅是保存信息,而是准确显示需要多少空间
  • 保存文档时,我可以轻松获得JTextAreas的高度,因此在再次打开文档时可以使用它们

修改: 在这个问题中引用的文件不是JTextAreas中使用的“文档”和类似的东西,而是我的程序中的自定义类中的“文档”(我没有提及,因为它是无关紧要的,除非它被理解为“文件“)。

1 个答案:

答案 0 :(得分:1)

因为您的Document建模了层次结构,所以需要一棵树。由于您的界面需要每个节点的控件和视图,因此您需要一个表。看见hereOutline可能是合适的选择。您的DocumentTreeModel将保留对文档根Element的引用,就像示例的FileTreeModel包含对根File的引用一样。您的RowModel将包含JLabelJCheckBoxJTextArea