1: menu.fxml | Scherm1.fxml | Scherm2.fxml- Vergeet de "yourpackage" van fx:contrplller aan te passen.
- Don't forget to adjust the name "yourpackage"
- No te olvides de personalizar el nombre "yourpackage" in su proyecto.
Menu.fxml :
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.*?> <?scenebuilder-background-color 0x404040ff?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="550.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="yourpackage.MenuController"> <children> <VBox id="VBoxSchermMain" alignment="CENTER" prefHeight="550.0" prefWidth="600.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <Label prefHeight="42.0" prefWidth="142.0" text="Keuzescherm" textFill="WHITE"> <font> <Font name="Arial" size="22.0" /> </font> </Label> <Button fx:id="button1" onAction="#aksie_naarscherm1" prefHeight="42.0" prefWidth="296.0" style=" -fx-background-color: radial-gradient(radius 100%, derive(-fx-base,-60%), derive(-fx-base,-80%)), derive(-fx-base,-40%), radial-gradient(radius 100%, derive(-fx-base,-60%), derive(-fx-base,-80%)); -fx-background-insets: 0 0 -1 0, 0, 1, 2; -fx-background-radius: 25, 25, 24; -fx-padding: 0.0em 0.5em 0.0em 0.0em; -fx-alignment: CENTER; -fx-content-display: LEFT; " text="Laad scherm TabPane één" textFill="#99c2ff"> <font> <Font name="System Bold" size="20.0" fx:id="x1" /> </font> </Button> <Button fx:id="button2" font="$x1" onAction="#aksie_naarscherm2" prefHeight="42.0" prefWidth="296.0" style=" -fx-background-color: radial-gradient(radius 100%, derive(-fx-base,-60%), derive(-fx-base,-80%)), derive(-fx-base,-40%), radial-gradient(radius 100%, derive(-fx-base,-60%), derive(-fx-base,-80%)); -fx-background-insets: 0 0 -1 0, 0, 1, 2; -fx-background-radius: 25, 25, 24; -fx-padding: 0.0em 0.5em 0.0em 0.0em; -fx-alignment: CENTER; -fx-content-display: LEFT; " text="Laad scherm TabPane twee" textFill="#74ff33" /> </children> </VBox> </children> </AnchorPane>
Scherm1.fxml :
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.*?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="550.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="yourpackage.Scherm1Controller"> <children> <VBox id="VBoxScherm2" alignment="CENTER" prefHeight="550.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <TabPane prefHeight="500.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="ALWAYS"> <tabs> <Tab text="SCHERM 1 Tab 1"> <content> <AnchorPane id="Content" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="500.0" prefWidth="600.0" /> </content> </Tab> <Tab text="SCHERM 1 Tab 2"> <content> <AnchorPane id="Content" minHeight="-Infinity" minWidth="-Infinity" prefHeight="500.0" prefWidth="600.0" /> </content> </Tab> </tabs> </TabPane> <Button fx:id="button" onAction="#aksie_NaarHoofdscherm" text="Ga naar scherm Menu"> <font> <Font name="System Bold" size="12.0" /> </font> </Button> </children> </VBox> </children> </AnchorPane>
Scherm2.fxml :
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.paint.*?> <?import javafx.scene.text.*?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="yourpackage.Scherm2Controller"> <children> <VBox id="VBoxScherm1" alignment="TOP_CENTER" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <TabPane prefHeight="500.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="ALWAYS"> <tabs> <Tab text="SCHERM 2 Tab 1"> <content> <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="-1.0" prefWidth="-1.0" /> </content> </Tab> <Tab text="SCHERM 2 Tab 2"> <content> <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> </content> </Tab> </tabs> </TabPane> <Button contentDisplay="CENTER" mnemonicParsing="false" onAction="#aksie_NaarHoofdscherm" text="Naar Menu scherm"> <font> <Font name="System Bold" size="12.0" /> </font> </Button> </children> </VBox> </children> </AnchorPane>
2: Start_Schermen_FXMLTest.java
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
/**
* Belgium : JavaFX : Meerdere fxml-bestanden beheren
* English : JavaFX : Managing multiple screens
* Español : JavaFX : Gestión de múltiples pantallas
* @auteur : pw 22-11-2013
*/
public class Start_Schermen_FXMLTest extends Application {
public static AnchorPane root = new AnchorPane();
public static HashMap<String, Node> schermen = new HashMap<>();
//public static HashMap<String, Node> screencontrollers = new HashMap<>();
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) {
// Schermen in Hashmap laden
// Load the different (fxml files) screens into a Hashmap
// Almacenar las pantallas
SchermBeheer sc = new SchermBeheer();
sc.laadSchermen("MENU", "Menu.fxml");
sc.laadSchermen("SCHERM2", "Scherm2.fxml");
sc.laadSchermen("SCHERM1", "Scherm1.fxml");
// Laad het basischerm met keuzemenu:
// Load the Main screen (menu.fxml)
// Cargue la pantalla principal (menu.fxml)
FXMLLoader fxmlLoader = new FXMLLoader();
URL url = getClass().getResource("Menu.fxml");
fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
try {
root = (AnchorPane) fxmlLoader.load(url.openStream());
root.setStyle("-fx-background-color: black;");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scene scene = new Scene(root, 550, 600);
stage.setTitle("Meervoudige schermen mett eigen controller");
stage.setScene(scene);
stage.show();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
sc.laadScherm("MENU", "Menu.fxml");
}
}
3: SchermBeheer.java
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.layout.AnchorPane;
/**
* Belgium : JavaFX : Meerdere fxml-bestanden beheren
* English : JavaFX : Managing multiple schermen
* Español : JavaFX : Gestión de múltiples pantallas
*
* @auteur : pw 22-11-2013
*/
public class SchermBeheer extends AnchorPane implements Initializable {
public void laadScherm(String naam, String schermFXML) {
if (Start_Schermen_FXMLTest.schermen.get(naam) != null) {
// Belgium : oud scherm verwijderen en nieuw scherm toevoegen
// English : remove the previous screen and add the new one
// Español : borrar la pantalla anterior y agregar el nuevo
Start_Schermen_FXMLTest.root.getChildren().clear();
Start_Schermen_FXMLTest.root.getChildren().add(Start_Schermen_FXMLTest.schermen.get(naam));
} else {
try {
URL url = getClass().getResource(schermFXML);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane scherm = (AnchorPane) fxmlLoader.load(url
.openStream());
Start_Schermen_FXMLTest.root.getChildren().clear();
Start_Schermen_FXMLTest.root.getChildren().add(scherm);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void laadSchermen(String naam, String schermFXML) {
try {
URL url = getClass().getResource(schermFXML);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane scherm = (AnchorPane) fxmlLoader.load(url.openStream());
fxmlLoader.getController();
// Belgium : Alle schermen opslagen in Hashmap
// English : Store all the schermen in a Hashmap
// Español : Guarde todas las pantallas en un Hashmap
Start_Schermen_FXMLTest.schermen.put(naam, scherm);
// FXMLTest.screencontrollers.put(naam, (Node)
// fxmlLoader.getController());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
4: MenuController.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
/**
* Belgium : JavaFX : Meerdere fxml-bestanden beheren
* English : JavaFX : Managing multiple screens
* Español : JavaFX : Gestión de múltiples pantallas
*
* @auteur : pw 22-11-2013
*/
public class MenuController extends AnchorPane implements Initializable {
@FXML
private void aksie_naarscherm1(ActionEvent event) {
System.out.println("Controller Menu");
SchermBeheer sc = new SchermBeheer();
sc.laadScherm("SCHERM1", "Scherm1.fxml");
}
@FXML
private void aksie_naarscherm2(ActionEvent event) {
System.out.println("Menu Controller");
SchermBeheer sc = new SchermBeheer();
sc.laadScherm("SCHERM2", "Scherm2.fxml");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
5: Scherm1Controller.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.VBox;
/**
* Belgium : JavaFX : Meerdere fxml-bestanden beheren
* English : JavaFX : Managing multiple screens
* Español : JavaFX : Gestión de múltiples pantallas
*
* @auteur : pw 22-11-2013
*/
public class Scherm1Controller extends VBox implements Initializable {
@FXML
private void aksie_NaarHoofdscherm(ActionEvent event) {
System.out.println("Controller Scherm 1");
SchermBeheer sc = new SchermBeheer();
sc.laadScherm("MENU", "Menu.fxml");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
6: Scherm2Controller.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.VBox;
/**
* Belgium : JavaFX : Meerdere fxml-bestanden beheren
* English : JavaFX : Managing multiple screens
* Español : JavaFX : Gestión de múltiples pantallas
*
* @auteur : pw 22-11-2013
*/
public class Scherm2Controller extends VBox implements Initializable {
@FXML
private void aksie_NaarHoofdscherm(ActionEvent event) {
System.out.println("Controller Scherm 2");
SchermBeheer sc = new SchermBeheer();
sc.laadScherm("MENU", "Menu.fxml");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
|