Transition d'écran JavaFX8

1. Spécifications

Une fois exécuté, l'écran 1 s'ouvre. L'écran 1 a un bouton pour passer à l'écran 2 et un bouton pour fermer la fenêtre. L'écran 2 a un bouton pour passer à l'écran 1.

2. Structure des fichiers

Créez un projet dans Eclipse.

screenTrance ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ (1) └ src ・ ・ ・ ・ ・ ・ ・ ・ (2) └ pkg ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ (3) ├ Main.java ・ ・ ・ ・ ・ ・ ・ ・ ・ (4) ├ MainController.java ・ ・ ・ ・ (5) ├ Écran.java ・ ・ ・ ・ ・ ・ ・ ・ (6) ├ SubController.java ・ ・ ・ ・ ・ (7) ├ mainScreen.fxml ・ ・ ・ ・ ・ ・ (8) └ subScreen.fxml ・ ・ ・ ・ ・ ・ ・ (9)

(1) Projet à créer (2) Répertoire du fichier source créé arbitrairement lors de la création d'un projet (3) Package à créer (4) Fichier source (décrit dans le chapitre suivant), écran initial (écran 1) démarrage (5) Fichier source (décrit dans le chapitre suivant), contrôleur sur l'écran 1 (6) Fichier source (décrit dans le chapitre suivant), démarrage de l'écran lors de la transition d'écran (7) Fichier source (décrit dans le chapitre suivant), contrôleur sur l'écran 2 (8) Fichier source (décrit dans le chapitre suivant, créé par SceneBuilder), contenu de l'écran 1 (9) Fichier source (décrit dans le chapitre suivant, créé par SceneBuilder), contenu de l'écran 2

3. Fichier source

3.1. Main.java

Main.java


package pkg;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			//Chargement des graphiques de scène depuis FXML
			FXMLLoader loader = new FXMLLoader(getClass().getResource("mainScreen.fxml"));
			Parent root = loader.load();

			//Création d'une scène avec le nœud racine du jeu de graphes de scènes
			Scene scene = new Scene(root, 600, 400);
			//Mise en scène de la scène
			primaryStage.setScene(scene);
			primaryStage.setTitle("Écran 1");
			primaryStage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}

3.2. MainController.java

MainController.java


package pkg;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class MainController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Button nextButton;

    @FXML
    private Button closeButton;

    @FXML
    void OnclickedCloseButton(ActionEvent event) {
    	closeButton.getScene().getWindow().hide();			//Fermer l'écran
    }

    @FXML
    void OnclickedNextButton(ActionEvent event) {
    	nextButton.getScene().getWindow().hide();			//Fermer l'écran
    	Screen screen = new Screen();						//Ouvrir l'écran(Appel de méthode)Préparation de
    	screen.transitionScreen("subScreen.fxml", "Écran 2");	//Ouvrir l'écran
    }

    @FXML
    void initialize() {
        assert nextButton != null : "fx:id=\"nextButton\" was not injected: check your FXML file 'screen.fxml'.";
        assert closeButton != null : "fx:id=\"closeButton\" was not injected: check your FXML file 'screen.fxml'.";

    }
}

3.3. Screen.java

Screen.java


package pkg;

import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Screen {
	public void transitionScreen(String fxmlName, String fxmlTitle) {
		try {
			//Chargement des graphiques de scène depuis FXML
			FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlName));
			Parent root = loader.load();

			//Création d'une scène avec le nœud racine du jeu de graphes de scènes
			Scene scene = new Scene(root, 600, 400);
			//Mise en scène de la scène
			Stage stage = new Stage();

			stage.setScene(scene);
			stage.setTitle(fxmlTitle);
			stage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3.4. SubController.java

SubController.java


package pkg;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class SubController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Button backButton;

    @FXML
    void OnclickedBackButton(ActionEvent event) {
    	backButton.getScene().getWindow().hide();			//Fermer l'écran
    	Screen screen = new Screen();						//Ouvrir l'écran(Appel de méthode)Préparation de
    	screen.transitionScreen("MainScreen.fxml", "Écran 1");	//Ouvrir l'écran
    }

    @FXML
    void initialize() {
        assert backButton != null : "fx:id=\"backButton\" was not injected: check your FXML file 'subScreen.fxml'.";

    }
}

3.5. mainScreen.fxml

mainScreen.fxml


<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pkg.MainController">
   <children>
      <Button fx:id="nextButton" layoutX="255.0" layoutY="184.0" mnemonicParsing="false" onAction="#OnclickedNextButton" prefHeight="33.0" prefWidth="91.0" text="Aller à l'écran 2" />
      <Button fx:id="closeButton" layoutX="255.0" layoutY="337.0" mnemonicParsing="false" onAction="#OnclickedCloseButton" prefHeight="33.0" prefWidth="91.0" text="Fermer" />
      <Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="Écran 1">
         <font>
            <Font size="20.0" />
         </font>
      </Label>
   </children>
</Pane>

3.6. subScreen.fxml

subScreen.java


<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pkg.SubController">
   <children>
      <Button fx:id="backButton" layoutX="255.0" layoutY="184.0" mnemonicParsing="false" onAction="#OnclickedBackButton" prefHeight="33.0" prefWidth="91.0" text="Aller à l'écran 1" />
      <Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="Écran 2">
         <font>
            <Font size="20.0" />
         </font>
      </Label>
   </children>
</Pane>

4. Image d'écran réelle

4.1. Écran 1

screen1.png

4.2. Écran 2

screen2.png

Recommended Posts

Transition d'écran JavaFX8
Méthode de transition d'écran
Mémorandum de transition d'écran
Développement Android ~ transition d'écran (intention) ~
[Note] Transition de scène avec JavaFX
écran
Transition d'écran Mémorandum de transfert d'informations
Paramètres d'animation au moment de la transition d'écran
Transition d'écran avec swing, java
Transition d'écran à l'aide de l'intention dans Kotlin
[Rails] Comment empêcher la transition d'écran
Transition d'écran par méthode Post [Java]
[Java Swing] Transition d'écran par CardLayout
Texte JavaFX
Mémorandum de transition d'écran Transfert d'informations depuis la liste
Mémorandum JavaFx
[Android Studio] Transition d'écran par le bouton [Java]