我的主要Window
的外观由具有BorderPane
结构的FXML文件定义。该center
标签定义如下:JavaFX - 基于加载的图像大小调整窗口大小
<center>
<ScrollPane focusTraversable="false">
<content>
<Pane fx:id="mapArea">
<ImageView fx:id="mapImageView" />
</Pane>
</content>
</ScrollPane>
</center>
在程序中,用户可以打开代表地图的图像文件,添加一些利益点,并保存所有版本。图像可以是任何尺寸。我想要的是让主窗口调整大小,以便在加载图像时,它完全适合ImageView
,尽管用户可以手动调整大小,例如,如果图像对于显示器来说太大。
现在在我的控制,我执行以下行加载图像时:
double width = getMap().getImage().getWidth();
double height = getMap().getImage().getHeight();
mapImageView.prefWidth(width);
mapImageView.prefHeight(height);
这有一些奇怪的(对我)的影响。如果ImageView
是Scene
中唯一的Node
,但是窗口的高度设置为使图像可以完全显示,但显然不是。窗户的宽度似乎没有受到任何影响。
我曾尝试摆弄周围对不同的对象,minWidth
,maxWidth
,prefWidth
,setResizeable
等不同的属性,但我觉得我在黑暗中跌跌撞撞我。我真的不知道这一切是如何结合在一起的,这听起来像是一件应该微不足道的事情。
如果您需要更多代码,请让我知道。
我知道我可以通过访问阶段引用来设置窗口的字面高度/宽度,但是我必须手动进行计算,考虑菜单大小和其他占用舞台空间的UI元素的大小图像视图。在我看来,应该简单地说“这个控件想要变得这么大,请确保容器相应地调整自己”? – kai
你已经有一个'ScrollPane'和一个'Pane'包裹在你的'ImageView'上。尝试在它们中的任何一个上调用'setPrefSize(width,height)',看看是否有效。 – AlmasB