0

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

例子

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

尝试打开文档时遇到问题。文档本身是由JPanels相互叠加的层组成的。JPanelsGUI 中的单个点永远不会超过 6 层。

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

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

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

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

我绝对不知道该怎么做,或者如果这是要走的路,我只能确定我上面描述的事情就是问题所在。

几个注意事项:

  • 这不是MigLayout错误,我去过论坛(下面的链接)
  • 看看这个(最后一个帖子)
  • 我不能将 aJScrollPane放入其中,JTextArea因为它的任务不仅是保存信息,而且要准确显示它需要多少空间
  • JTextAreas我可以在保存文档时轻松获得高度,因此在再次打开文档时可以使用它们

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

4

1 回答 1

1

因为您的Document模型是一个层次结构,所以您需要一棵树。因为您的界面对每个节点都需要一个控件和一个视图,所以您需要一个表。Outline,在这里看到,可能是一个合适的选择。您DocumentTreeModel将持有对文档的 root 的引用Element,就像示例FileTreeModel持有对 root 的引用一样File。您RowModel将包括 a JLabel、 aJCheckBox和 a JTextArea

于 2013-04-06T09:26:22.457 回答