如果绑定到Container-Height,ScrollPane不会立即调整ViewPort-Height的大小

问题描述

请考虑一个VBox继承的自定义组件。组件的高度和宽度可能会根据某些选择而变化。在我的Scene中,我通常有足够的垂直空间来容纳自定义组件,但水平方向可能会延伸得太远。

我尝试将自定义组件放置在ScrollPane内,并通过将ViewPort的{​​{1}}绑定到自定义组件(即minHeight')使其垂直生长高度。因此,可以防止出现垂直滚动条。

问题: 在VBox中,JavaFX 8仅在另一个用户输入(例如,在ScrollPane内单击或调整窗口大小)后才调整为正确的高度。

使用以下代码可以重现该问题:

ScrollPane

只需点击public class Main extends Application { @Override public void start(Stage primaryStage) { final VBox root = new VBox(5); final Scene scene = new Scene(root,400,500); final ListView<String> listView = new ListView<>(); final Rectangle rectangle = new Rectangle(600,300,Color.RED); final VBox customComponent = new VBox(rectangle); final ScrollPane scrollPane = new ScrollPane(customComponent); scrollPane.minViewportHeightproperty().bind(customComponent.heightproperty()); listView.getItems().addAll("Smaller","Taller"); listView.getSelectionModel().selectedItemproperty().addListener((obs,old,item) -> { if (Objects.equals(item,"Smaller")) { rectangle.setHeight(200); } else if (Objects.equals(item,"Taller")) { rectangle.setHeight(400); } }); root.getChildren().addAll(listView,scrollPane); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } 内的 Smaller Taller

在没有ListView的情况下将矩形直接添加ScrollPane时,不会出现此问题。但是,这不能解决我的问题,因为我无法轻松更改正在使用的自定义组件。 正确切换到VBoxOpenJFX 11会垂直增长,但没有其他用户输入就不会缩小。因此,仅升级我的ScrollPane版本似乎无法解决问题。

是否有一种方法可以迫使JavaFX立即调整其大小,或者只是另一种方法来使ScrollPane适应自定义组件的高度并且只能水平滚动?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)