微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如果绑定到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 举报,一经查实,本站将立刻删除。