我的主要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);
这有一些奇怪的(对我而言)效果。如果ImageView
是Node
中唯一的Scene
,则设置窗口的高度以便可以完全显示图像,但显然不是。{1}}。窗户的宽度似乎根本没有受到影响。
我尝试在不同的对象上摆弄不同的属性,minWidth
,maxWidth
,prefWidth
,setResizeable
等,但我觉得我磕磕绊绊黑暗。我真的不知道这一切是如何结合在一起的,这个声音就像是应该是微不足道的。
如果您需要更多代码,请与我们联系。
答案 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)