2

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

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

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

然而,在我的ChangeListener.changed()实现中,一切都不同了。调用requestLayout()似乎没有任何作用。此外,我每个最里面的 GridPanes 的边界是[0,0,0,0]!看起来这里发生了一些异步操作,但我是 JavaFX 的新手,我不知道是什么。

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

4

1 回答 1

2

每个最里面的GridPane对象都有一个ColumnConstraints带有 apercentWidth的对象100。删除将这个(不必要的)ColumnConstraints对象添加到最里面的对象的代码修复了仅在包含的对象设置GridPane为时出现的布局错误行为 。LabelwrapTexttrue

于 2012-11-09T18:46:10.123 回答