JavaFX - 根据加载的图像大小调整窗口大小

时间:2015-05-03 15:10:42

标签: java layout javafx

我的主要Window外观由具有BorderPane结构的FXML文件定义。 center标记的定义如下:

<center>
    <ScrollPane focusTraversable="false">
        <content>
            <Pane fx:id="mapArea">
                <ImageView fx:id="mapImageView" />
            </Pane>
        </content>
    </ScrollPane>
</center>

在程序中,用户可以打开表示地图的图像文件,添加一些兴趣点,并将其全部保存以供日后使用。图像可以是任何大小。我想要的是主窗口调整大小,以便在加载图像时,它完全适合ImageView,尽管允许用户手动调整大小,例如,如果图像对于他们的显示器来说太大。 / p>

现在在我的控制器中,我在加载图像时执行以下行:

double width = getMap().getImage().getWidth();
double height = getMap().getImage().getHeight();
mapImageView.prefWidth(width);
mapImageView.prefHeight(height);

这有一些奇怪的(对我而言)效果。如果ImageViewNode中唯一的Scene,则设置窗口的高度以便可以完全显示图像,但显然不是。{1}}。窗户的宽度似乎根本没有受到影响。

我尝试在不同的对象上摆弄不同的属性,minWidthmaxWidthprefWidthsetResizeable等,但我觉得我磕磕绊绊黑暗。我真的不知道这一切是如何结合在一起的,这个声音就像是应该是微不足道的。

如果您需要更多代码,请与我们联系。

1 个答案:

答案 0 :(得分:0)

在JavaFX中,当你想为某个字段X设置一个值时,它通常会有一个相应的setX()方法。

prefWidth(double)prefHeight(double)返回节点的宽度和高度的首选值。 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#prefWidth-double-

如果要在start(Stage)方法中设置窗口(JavaFX Stage)大小,请获取对primaryStage的引用。加载完图片后,您可以执行stage.setWidth(width)stage.setHeight(height) 例如:

public class YourJavaFXApp extends Application {

    private Stage stage;

    @Override
    public void start(Stage primaryStage) throws Exception {
        stage = primaryStage;
        // some code here
    }
}

如果您想调整加载的图片大小以适应当前窗口大小,那么您可以使用mapImageView.setFitWidth(width)mapImageView.setFitHeight(height)