У меня много FXML с разными контроллерами, и я хочу получить доступ ко всем экземплярам контроллеров в одном классе, используя статические методы.Причина, по которой я это делаю, потому что я хочу изменить интерфейс другого FXML с другого контроллера.Я не уверен, есть ли лучший способ сделать это.Моя проблема в моем классе SceenViews, потому что я не знаю, какой тип данных использовать для хранения экземпляра контроллера FXML в моей переменной controllerMap.
Внутри моего пакета: Main.java, ScreenViews.java, Frame.FXML, FrameController.java, Login.FXML, LoginController.java, Dashboard.FXML, DashboardController.java, Journal.FXML и JournalController.java
Main.java
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
ScreenViews.loadFXML("Frame", "Frame.fxml");
ScreenViews.loadFXML("Login", "Login.fxml");
ScreenViews.loadFXML("Dashboard", "Dashboard.fxml");
ScreenViews.loadFXML("Journal", "Journal.fxml");
Scene scene = new Scene((Parent) ScreenViews.getView("Frame"));
scene.setFill(Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
В моем ScreenViews.java какой тип данных можно использовать для хранения другого экземпляра контроллера в моей переменной controllerMap?
public class ScreenViews {
private static HashMap<String, Node> viewMap = new HashMap<>();
//HASHMAP FOR CONTROLLER INSTANCE
private static HashMap<String, datatype? > controllerMap = new HashMap<>();
public static void addView(String name, Node screen) {
viewMap.put(name, screen);
}
public static Node getView(String name) {
return viewMap.get(name);
}
public static void addController(String name, datatype? controller) {
controllerMap.put(name, controller);
}
public static datatype? getController(String name) {
return controllerMap.get(name);
}
public static boolean loadFXML(String name, String resource) {
try {
FXMLLoader fxLoader = new
FXMLLoader(ScreenViews.class.getResource(resource));
Parent loadedFXML = (Parent) fxLoader.load();
addView(name, loadedFXML);
addController(name, fxLoader.getController());
return true;
} catch (IOException e) {
System.out.println(e.getMessage());
return false;
}
}
}
Пример LoginController.код Java
public class LoginController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
public void frameSetUI(ActionEvent event) {
ScreenViews.getController("Frame").getFramePane().getChildren().add(ScreenViews.get("Dashboard"));
}
}
Пример кода FrameController.java
public class FrameController implements Initializable {
@FXML private StackPane rootPane;
@FXML private AnchorPane titleBar;
@FXML private AnchorPane framePane;
@FXML private Button toDashboard;
@FXML private AnchorPane mainPane;
public void initialize(URL url, ResourceBundle rb) {
}
public AnchorPane getFramePane(){
return framePane;
}
}