2013-05-13 183 views
2

我正在用JavaFX 2.2.7-b01編寫一個應用程序。如何使javafx.scene.Scene調整大小,同時保持縱橫比?

這裏是我現在有的代碼的一個例子。我如何允許調整應用程序窗口大小,但保持最初配置的寬高比?換句話說,如果用戶調整窗口大小,窗口寬度應該總是保持窗口高度的兩倍。

... 
    public void showScene(Stage stage, String fxmlPath) { 
    try { 
     FXMLLoader loader = new FXMLLoader(); 
     loader.setBuilderFactory(new JavaFXBuilderFactory()); 
     loader.setLocation(fxmlPath); 
     Parent page; 
     try (InputStream in = Main.class.getResourceAsStream(fxmlPath)) { 
     page = (Parent) loader.load(in); 
     } 
     Scene scene = new Scene(page, 400, 200); 
     stage.setScene(scene); 
     stage.sizeToScene(); 
     stage.show(); 
    } catch (Exception ex) { 
     ... 
    } 
    } 
    ... 

看來JavaFX的允許用戶指定在構造場景的寬度和高度,但不會允許編程訪問更新的寬度或高度。沒有setWidth或setHeight方法。我知道我可以添加屬性監聽器來獲取場景的寬度/高度,只能調整大小,但是我無法弄清楚如何動態更改場景尺寸,所以我可以強制縱橫比保持。

我想如果我是子類的場景對象(如果我必須我會),但有沒有其他簡單的方法來做到這一點?

+1

我不認爲你會發現這個使用JavaFX 2.2體面的解決辦法。我建議記錄針對[JavaFX問題跟蹤器](https://javafx-jira.kenai.com)的功能請求。 – jewelsea 2013-05-15 07:48:12

回答

3

>How to make javafx.scene.Scene resize while maintaining an aspect ratio?

通過操縱舞臺大小,而不是場景:

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button(); 
    btn.setText("Play by resizing the window"); 
    VBox root = new VBox(); 
    root.getChildren().add(btn); 
    root.setStyle("-fx-background-color: gray"); 

    Scene scene = new Scene(root); 
    primaryStage.setScene(scene); 
    primaryStage.minWidthProperty().bind(scene.heightProperty().multiply(2)); 
    primaryStage.minHeightProperty().bind(scene.widthProperty().divide(2)); 
    primaryStage.show(); 
} 
+1

我只是想指出,這個解決方案並不完美,就好像放大窗口然後嘗試縮小窗口一樣,它不會讓您沿着對角線的方向走,您最終不得不從底部擺動它,從側面看。 – MikaelF 2017-10-08 02:06:36

0

在使用Java Fx Scene Builder的Ne​​tBeans中,您可以使用AnchorPane Constraints來設置 調整舞臺大小。

相關問題