JavaFx 图像大小调整

Emi*_*ore 5 javafx image

我有一个带有菜单顶部的边框窗格,左侧有一个网格,中间有一个图像。我希望图像与边框中心的大小相同,因为现在图像越过我的网格。

我试过这个:

           imageView.fitWidthProperty().bind(box.widthProperty());
Run Code Online (Sandbox Code Playgroud)

其中 imageView 是我的图像的名称,而 box 是 BorderPane 对象。谢谢。

jew*_*sea 4

请参阅 JavaFX 功能请求RT-21337 添加 ImageViewPane 和 MediaViewPane 控件,其中包含示例实现的代码附件ImageViewPane,该示例实现会将其ImageView包含的大小调整为该区域可用的区域。为了获得所需的行为,您可能还需要在 上实现computeMinWidthcomputeMinHeightImageViewPane,以便它们返回零而不是图像的最小尺寸。


现在图像超出了我的网格

这是因为图像的最小尺寸当前大于BorderPane中心的可用空间:

默认情况下,BorderPane 不会裁剪其内容,因此,如果子项的最小尺寸使其无法容纳在其空间内,则子项的边界可能会超出其自身的边界。

防止中心内容溢出边框的一些潜在替代方案:

  1. 在中心节点上手动设置一个剪辑,以防止其溢出边框。
  2. 动态调整上面链接示例ImageView中的大小ImageViewPane
  3. 将 放置在ScrollPaneImageView中。
  4. 使用css -fx-background-image 属性来显示图像并动态调整图像大小,而不是使用ImageView.
  5. 在设置边框内容之前先设置边框窗格的中心,这样它将呈现在边框内容下方。
  6. 使用与边框窗格不同的构造(例如水平框、垂直框等),当节点大于可用显示区域时,它们不会与节点重叠。

我试过这个:imageView.fitWidthProperty().bind(box.widthProperty());

我从提供的代码中猜测这是行不通的,因为图像的封闭框是某种动态可调整大小的窗格,因此框的最小宽度是由图像的宽度决定的,反之亦然。