【发布时间】:2018-07-01 07:55:53
【问题描述】:
我在 Pane 内的 HBox 中有 ImageView,并且在调整舞台大小时希望 ImageView 高度适合 HBox 高度。试试下面的代码
package sample;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
pane.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
HBox hBox = new HBox();
hBox.setBackground(new Background(new BackgroundFill(Color.GREEN, CornerRadii.EMPTY, Insets.EMPTY)));
hBox.setPrefHeight(100);
hBox.setPrefWidth(100);
hBox.prefHeightProperty().bind(pane.heightProperty());
ImageView imageView = new ImageView("http://www.calgary.ca/CA/city-manager/scripts/about-us/webparts/images/ourHistory_retina.jpg");
imageView.fitHeightProperty().bind(hBox.heightProperty());
imageView.setPreserveRatio(true);
hBox.getChildren().add(imageView);
pane.getChildren().add(hBox);
primaryStage.setScene(new Scene(pane, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
启动时,ImageView 不适合窗口高度,它以原始大小显示。只有当我调整窗口大小以使其更大时,它才会放大,然后是原始图像大小。
我也看到了,hBox.prefHeightProperty().bind(pane.heightProperty()) 工作得很好(图像后面的红色 HBox 背景的高度是相应的窗口高度)。
看来imageView.fitHeightProperty().bind(hBox.heightProperty()) 的行为不像我预期的那样。
如何使 ImageView 适合 HBox 的 height,嵌套在 Pane 中?
【问题讨论】:
-
你能解释一下你真正想要做什么,特别是
HBox的高度(和宽度)吗?看起来您希望它填充窗格的整个高度(但不是宽度)。如果是这样,最好为根使用布局窗格,让您这样做(而不是将 hbox 的高度绑定到窗格的高度)。对于 hbox 的宽度,您将 pref 宽度设置为 100,但图像视图的宽度将由图像和 hbox 的高度决定... -
James,我正在尝试创建简单的水平画廊,将图像放入 hbox。在调整 HBox 的父级大小时,我需要图像高度与 HBox 高度完全匹配。
标签: java user-interface javafx javafx-8 javafx-2