我正在使用 JavaFX 创建一个用于图像查看的程序。
我在 BorderPane 中有一个位于居中位置的 ImageView,它由 StackPane 和 VBox 包裹。 StackPane 随 VBox 一起增长,我将 ImageView 与 StackPane Width 和 Height 属性绑定,这样当我调整窗口大小时,我的 ImageView 将更改其
setFitHeight
和 setFitWidth
。
它按预期工作,但问题是当窗口从最大值调整大小时,图像不会调整其高度。我发现 StackPane 的
heightProperty
更改侦听器不会调用。
我如何实现我的目标?
图像视图的FXML代码:
<center>
<VBox fx:id="imageVBox" alignment="CENTER" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets />
</BorderPane.margin>
<StackPane fx:id="stackPane" VBox.vgrow="ALWAYS">
<ImageView fx:id="imageView" fitHeight="250.0" fitWidth="300.0" nodeOrientation="INHERIT" onDragDropped="#getDragImage" onDragOver="#dragOver" pickOnBounds="true" preserveRatio="true" StackPane.alignment="CENTER">
<viewport>
<Rectangle2D />
</viewport>
</ImageView>
</StackPane>
</VBox>
将 ImageView 与 StackPane 绑定的 Java 代码:
imageView.fitWidthProperty().bind(stackPane.widthProperty());
imageView.fitHeightProperty().bind(stackPane.heightProperty());
问题:
好吧,我从那个帖子的答案中发现了问题JavaFX - BorderPane/StackPane 在孩子改变后没有调整大小,问题是我没有给 StackPane 任何剪切所需的最小大小。所以如果它对某人有帮助,我会发布答案。
stackPane.setMinSize(0, 0);
imageView.fitWidthProperty().bind(stackPane.widthProperty());
imageView.fitHeightProperty().bind(stackPane.heightProperty());