2015-05-03 167 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

相關問題