如何解决如果绑定到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
时,不会出现此问题。但是,这不能解决我的问题,因为我无法轻松更改正在使用的自定义组件。
正确切换到VBox
,OpenJFX 11
会垂直增长,但没有其他用户输入就不会缩小。因此,仅升级我的ScrollPane
版本似乎无法解决问题。
是否有一种方法可以迫使JavaFX
立即调整其大小,或者只是另一种方法来使ScrollPane
适应自定义组件的高度并且只能水平滚动?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。