上下文:我正在使用 java1.7.0_07 和 Jython 构建 JavaFX 应用程序。我的应用程序有一个 ScrollPane,其中包含一个 GridPane,其中包含可变数量的 GridPanes。每次 TreeView 选择更改时,我的应用程序都会丢弃并重建最里面的 GridPanes。
问题:当我在 TreeView 中选择某些内容时,最里面的 GridPane 非常大,除了第一个最里面的 GridPane 之外的所有 GridPane 都被推到了 ScrollPane 的可视区域之外。无论如何,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)
,即使使用文本换行,布局也会正常行为启用,但我真的不喜欢尝试猜测一个合适的首选高度来分配给我的每个标签。我只希望标签以当我“摆动”包含窗口时它们假定的边界开始。但如何呢?
最佳答案
最里面的每个 GridPane
对象都有一个 ColumnConstraints
对象,其 percentWidth
为 100
。删除将此(不必要的)ColumnConstraints
对象添加到最里面的 GridPane
对象的代码修复了仅当包含的 Label
对象具有wrapText
设置为 true
。
关于javafx - 如何正确制作嵌套的 JavaFX GridPanes 布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240063/