问题描述
请考虑一个自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 (将#修改为@)