2015-05-03 148 views
0

我的主要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); 

这有一些奇怪的(对我)的影响。如果ImageViewScene中唯一的Node,但是窗口的高度设置为使图像可以完全显示,但显然不是。窗户的宽度似乎没有受到任何影响。

我曾尝试摆弄周围对不同的对象,minWidthmaxWidthprefWidthsetResizeable等不同的属性,但我觉得我在黑暗中跌跌撞撞我。我真的不知道这一切是如何结合在一起的,这听起来像是一件应该微不足道的事情。

如果您需要更多代码,请让我知道。

回答

0

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

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

如果要设置窗口(JavaFX Stage)大小,请在start(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)

+0

我知道我可以通过访问阶段引用来设置窗口的字面高度/宽度,但是我必须手动进行计算,考虑菜单大小和其他占用舞台空间的UI元素的大小图像视图。在我看来,应该简单地说“这个控件想要变得这么大,请确保容器相应地调整自己”? – kai

+0

你已经有一个'ScrollPane'和一个'Pane'包裹在你的'ImageView'上。尝试在它们中的任何一个上调用'setPrefSize(width,height)',看看是否有效。 – AlmasB

相关问题