JavaFX8-Bildschirmübergang

1. Technische Daten

Bei der Ausführung wird Bildschirm 1 geöffnet. Bildschirm 1 verfügt über eine Schaltfläche zum Übergang zu Bildschirm 2 und eine Schaltfläche zum Schließen des Fensters. Bildschirm 2 verfügt über eine Schaltfläche zum Übergang zu Bildschirm 1.

2. Dateistruktur

Erstellen Sie ein Projekt in Eclipse.

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

(1) Zu erstellendes Projekt (2) Quelldateiverzeichnis, das beim Erstellen eines Projekts willkürlich erstellt wurde (3) Zu erstellendes Paket (4) Quelldatei (im nächsten Kapitel beschrieben), Startbildschirm (Bildschirm 1) wird gestartet (5) Quelldatei (im nächsten Kapitel beschrieben), Controller auf Bildschirm 1 (6) Quelldatei (im nächsten Kapitel beschrieben), Bildschirmstart beim Bildschirmübergang (7) Quelldatei (im nächsten Kapitel beschrieben), Controller auf Bildschirm 2 (8) Quelldatei (beschrieben im nächsten Kapitel, erstellt von SceneBuilder), Inhalt von Bildschirm 1 (9) Quelldatei (beschrieben im nächsten Kapitel, erstellt von SceneBuilder), Inhalt von Bildschirm 2

3. Quelldatei

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 {
			//Laden von Szenendiagrammen aus FXML
			FXMLLoader loader = new FXMLLoader(getClass().getResource("mainScreen.fxml"));
			Parent root = loader.load();

			//Erstellen einer Szene mit dem Wurzelknoten des Szenendiagrammsatzes
			Scene scene = new Scene(root, 600, 400);
			//Die Szene auf die Bühne bringen
			primaryStage.setScene(scene);
			primaryStage.setTitle("Bildschirm 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();			//Bildschirm schließen
    }

    @FXML
    void OnclickedNextButton(ActionEvent event) {
    	nextButton.getScene().getWindow().hide();			//Bildschirm schließen
    	Screen screen = new Screen();						//Bildschirm öffnen(Methodenaufruf)Vorbereitung von
    	screen.transitionScreen("subScreen.fxml", "Bildschirm 2");	//Bildschirm öffnen
    }

    @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 {
			//Laden von Szenendiagrammen aus FXML
			FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlName));
			Parent root = loader.load();

			//Erstellen einer Szene mit dem Wurzelknoten des Szenendiagrammsatzes
			Scene scene = new Scene(root, 600, 400);
			//Die Szene auf die Bühne bringen
			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();			//Bildschirm schließen
    	Screen screen = new Screen();						//Bildschirm öffnen(Methodenaufruf)Vorbereitung von
    	screen.transitionScreen("MainScreen.fxml", "Bildschirm 1");	//Bildschirm öffnen
    }

    @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="Gehen Sie zu Bildschirm 2" />
      <Button fx:id="closeButton" layoutX="255.0" layoutY="337.0" mnemonicParsing="false" onAction="#OnclickedCloseButton" prefHeight="33.0" prefWidth="91.0" text="schließen" />
      <Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="Bildschirm 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="Gehen Sie zu Bildschirm 1" />
      <Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="Bildschirm 2">
         <font>
            <Font size="20.0" />
         </font>
      </Label>
   </children>
</Pane>

4. Tatsächliches Bildschirmbild

4.1. Bildschirm 1

screen1.png

4.2. Bildschirm 2

screen2.png

Recommended Posts

JavaFX8-Bildschirmübergang
Bildschirmübergangsmethode
Bildschirmübergangsmemorandum
Android-Entwicklung ~ Bildschirmübergang (Absicht) ~
[Hinweis] Szenenübergang mit JavaFX
Bildschirm
Bildschirmübergang Memorandum zur Informationsübertragung
Animationseinstellungen zum Zeitpunkt des Bildschirmübergangs
Bildschirmübergang mit Swing, Java
Bildschirmübergang mit Intent in Kotlin
[Schienen] So verhindern Sie den Bildschirmübergang
Bildschirmübergang nach Post-Methode [Java]
[Java Swing] Bildschirmübergang durch CardLayout
JavaFX-Text
Bildschirmübergangsmemorandum Informationsübertragung aus der Listenansicht
JavaFx-Memorandum
[Android Studio] Bildschirmübergang über die Schaltfläche [Java]