如何正确地嵌套JavaFX GridPanes布局?

时间:2012-11-05 20:44:08

标签: javafx gridpanel

上下文:我正在使用java1.7.0_07和Jython构建JavaFX应用程序。我的应用程序有一个ScrollPane,它包含一个包含可变数量GridPanes的GridPane。每次TreeView选择更改时,我的应用程序会丢弃并重建最里面的GridPanes

问题:当我在TreeView中选择某些内容时,最里面的GridPanes是 huge ,除了ScrollPane可视区域之外的第一个最里面的GridPane外,其他所有内容都会被推送。无论如何,ScrollPane不显示滚动条,给人的印象是只有一个最内层的GridPane对象。手动调整包含ScrollPane“修复”内容的窗口的大小!从添加它们的那一刻起,我怎样才能让最里面的GridPanes成为那么大的尺寸?

当然,我尝试的第一件事就是从Jython解释器在外部GridPane上调用requestLayout(),这与调整包含窗口的大小一样。这也是我发现最里面的GridPanes很大的原因---我在每个最里面的GridPanes上调用了getBoundsInParent()

然而,在我的ChangeListener.changed()实现中,一切都不同。调用requestLayout()似乎没有做任何事情。而且,我最内层的GridPanes的边界是[0,0,0,0]!看起来这里有异步,但我是JavaFX的新手,我不知道是什么。

更新:越来越近了!每个最里面的GridPanes包含Label,我在每个标签上调用setWrapText(true)如果我没有在标签上启用换行,则布局行为正确!如果我在每个标签上调用setPrefHeight(40),即使启用了文本换行,布局也会正常运行,但我真的不喜欢尝试猜测适当的首选高度以分配给我的每个标签的想法。我只是希望标签以我们“摆动”包含窗口时所采用的边界开始。但是如何?

1 个答案:

答案 0 :(得分:2)

每个最里面的GridPane个对象都有ColumnConstraints个对象,percentWidth100。删除将此(不必要的)ColumnConstraints对象添加到最里面的GridPane对象的代码修复了仅当包含的Label对象wrapText设置为{{}时出现的布局错误行为1}}。