Я пишу проект JavaFX, в котором каждая сцена создается со своим собственным классом и объектом.
Это создает проблему, поскольку я хочу, чтобы каждая из этих сцен могла переключаться на другие сцены в программе.
Я уже использую одну глобальную переменную (класс Organizer, указанный ниже) для обработки зависимостей в моей программе, и я бы предпочел не использовать две.
Я также не хочу использовать какой-либо FXML или что-либо, кроме Native Java и JavaFX.
Как я могу переключать сцены в классах Java за пределами моего основного класса, не создаваявторая глобальная переменная, создание всех моих объектов Pane в моем главном классе или использование FXML?
мой основной класс:
package mainPackage;
import screens.*;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.Pane;
/**
* Creates Global Variable Organizer
* Organizer keeps track of various objects
*
* @author LuminousNutria
*/
public class Main extends Application {
// create initial Pane and Scene
private Pane mainMenu = new MainMenu().getPane();
private Scene initialScene = new Scene(mainMenu, 1600, 900);
// create global Organizer object
public static Organizer organ = new Organizer();
@Override
public void start(Stage stage) {
organ.setMain(initialScene);
stage.setScene(initialScene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
// public getScene =
}
MyКласс организатора:
package mainPackage;
import java.util.HashMap;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import screens.*;
/**
* Keeps track of everything that needs keeping track of.
*
* That includes: Regions Armor Weapons Goods Player gold
*/
public class Organizer {
// create screen Pane
private Pane hideout = new Hideout().getPane();
// create ScreenController object
private ScreenController sc;
/**
* Should only be called once, when the game starts.
*/
public Organizer() {
// Create ScreenController and add Panes.
sc = new ScreenController();
sc.addScreen("hideout", hideout);
}
public void setMain(Scene main) {
sc.main = main;
}
private class ScreenController {
// holds all the different Panes to be used as Scenes
private HashMap<String, Pane> screenMap = new HashMap<>();
// the scene currently displayed
private Scene main;
private ScreenController() {}
// adds a screen to the HashMap
private void addScreen(String name, Pane pane) {
screenMap.put(name, pane);
}
// removes a screen from the HashMap
private void removeScreen(String name) {
screenMap.remove(name);
}
// Replaces the root of the scene currently displayed, with another
private void activate(String name) {
main.setRoot(screenMap.get(name));
}
// Checks to see if a screen is already in the HashMap
private boolean checkForKey(String key) {
return screenMap.containsKey(key);
}
}
}