ImageView height属性绑定不会导致图像相应调整大小

问题描述 投票:0回答:1

我正在使用 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());

问题:

  1. 运行时我的程序窗口:

  1. 最大化窗口:

  1. 当我将其大小调整为默认值时,出现问题,图像未按预期调整大小:

javafx imageview image-resizing property-binding
1个回答
4
投票

好吧,我从那个帖子的答案中发现了问题JavaFX - BorderPane/StackPane 在孩子改变后没有调整大小,问题是我没有给 StackPane 任何剪切所需的最小大小。所以如果它对某人有帮助,我会发布答案。

所以我最终解决的绑定代码如下:

stackPane.setMinSize(0, 0);
imageView.fitWidthProperty().bind(stackPane.widthProperty());
imageView.fitHeightProperty().bind(stackPane.heightProperty());
© www.soinside.com 2019 - 2024. All rights reserved.