Comment créer une animation de redimensionnement pour l’étape JavaFX?

J’ai essayé d’effectuer une transition de dimensionnement pour une étape JavaFX afin de remplacer la scène actuelle (dans ce cas, un cadre de connexion) pour la fenêtre principale d’une application.
Lorsque cela se produit, étant donné que la nouvelle scène est plus grande, les fenêtres sont redimensionnées brusquement d’une manière non élégante.

Existe-t-il un moyen de configurer une transition de redimensionnement ou de redimensionnement pour le redimensionner?

Code pertinent:

InputStream is = null; try { is = getClass().getResourceAsStream("/fxml/principal.fxml"); Region pagina = (Region) cargadorFXML.load(is); cargadorFXML.getController().setEscenario(escenario); final Scene escena = new Scene(pagina, 900, 650); escena.setFill(Color.TRANSPARENT); escenario.setScene(escena); escenario.sizeToScene(); escenario.centerOnScreen(); escenario.show(); } catch (IOException ex) { // log "Unable to load the main application driver" log.error("No fue posible cargar el controlador principal de la aplicación."); log.catching(ex); } finally { if (is != null) { try { is.close(); } catch (IOException e) {} } } 

J’ai vraiment aimé votre idée alors j’ai réussi à faire un petit quelque chose. J’espère que cela t’aidera.

J’ai utilisé un Timer pour modifier la largeur et la hauteur de la scène toutes les 25 ms afin de donner l’impression d’une animation.

 import java.util.Timer; import java.util.TimerTask; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; public class SmoothResize extends Application { @Override public void start(final Stage stage) throws Exception { stage.setTitle("Area Chart Sample"); Group root = new Group(); Scene scene = new Scene(root, 250, 250); stage.setResizable(false); Timer animTimer = new Timer(); animTimer.scheduleAtFixedRate(new TimerTask() { int i=0; @Override public void run() { if (i<100) { stage.setWidth(stage.getWidth()+3); stage.setHeight(stage.getHeight()+3); } else { this.cancel(); } i++; } }, 2000, 25); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } } 

Vous pouvez également utiliser le mécanisme d’animation avec Timeline .
Quelques exemples sont disponibles ici .

Le seul problème est que Stage n’a pas de propriété write ou height et vous devez le créer vous-même. Exemple ci-dessous.

 WritableValue writableHeight = new WritableValue() { @Override public Double getValue() { return stage.getHeight(); } @Override public void setValue(Double value) { stage.setHeight(value); } };