2013-04-11 266 views
3

我有一个borderPane,其中有一个菜单顶部,一个网格左侧和一个中心图像。我希望图像与边界中心具有相同的大小,因为现在图像覆盖了我的网格。JavaFx图像调整大小

我尝试这样做:

  imageView.fitWidthProperty().bind(box.widthProperty()); 

其中ImageView的是我的形象和框中的名称是BorderPane object.Thank你。

回答

2

参见JavaFX的功能请求RT-21337 Add ImageViewPane and MediaViewPane controls其包含用于样品ImageViewPane实现其将调整大小它包含提供给区域的区域中的一个ImageView代码附件。要获得所需的行为,可能也需要在ImageViewPane上实现computeMinWidthcomputeMinHeight,以使它们返回零而不是图像的最小大小。


现在的图像会在我的网格

这是因为图像的最小尺寸是目前比你BorderPane中心的可用空间较大:

BorderPane在默认情况下不剪裁其内容,因此如果儿童的最小尺寸阻止它在其空间内适合,则儿童的边界可能会超出其自身范围。

一些潜在的替代品,以防止中心内容溢出边界:

  1. 手动设置中心节点上的clip,以防止其溢出边界。
  2. 动态调整ImageView的大小,如上面链接的ImageViewPane样本。
  3. ImageView置于ScrollPane中。
  4. 使用css -fx-background-image attributes来显示和动态调整图像的大小,而不是使用ImageView
  5. 在设置边框内容之前先设置边框窗格的中心,这样它就会在边框内容下面呈现。
  6. 使用与节点大于可用显示区域时不重叠节点的边框窗格(例如HBoxes,VBoxes等)中的不同构造。

我尝试这样做:imageView.fitWidthProperty().bind(box.widthProperty());

从提供的代码我的猜测是,这并没有工作,因为图像的包围盒是某种形式的动态调整大小的窗格,所以盒子的最小宽度由图像的宽度决定,反之亦然。