javafx tutorial español
Cómo hacer el cambio de tamaño de javafx.scene.Scene mientras se mantiene una relación de aspecto? (2)
En netbeans con Java Fx Scene Builder siempre puedes usar AnchorPane Constraints para configurar el cambio de tamaño de la etapa.
Estoy escribiendo una aplicación con JavaFX 2.2.7-b01.
Aquí hay un ejemplo del código que tengo actualmente. ¿Cómo puedo permitir que la ventana de la aplicación cambie de tamaño pero mantenga la relación de aspecto con la que está inicialmente configurada? En otras palabras, si el usuario cambia el tamaño de la ventana, el ancho de la ventana siempre debe ser el doble del alto de la ventana.
...
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) {
...
}
}
...
Parece que JavaFX permite a un usuario especificar el ancho y alto de una escena en el constructor, pero no permite el acceso programático para actualizar el ancho o alto. No hay métodos setWidth o setHeight. Sé que puedo agregar detectores de propiedades para obtener solo el ancho / alto de lectura de la escena mientras se cambia el tamaño, pero no he podido imaginar cómo cambiar dinámicamente las dimensiones de la escena para poder forzar la relación de aspecto. mantenido.
Me imagino que esto sería posible si subclase el objeto Scene (si tengo que hacerlo) pero ¿hay alguna otra manera simple de hacerlo?
> How to make javafx.scene.Scene resize while maintaining an aspect ratio?
Al manipular el tamaño del escenario en lugar de la escena:
@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();
}