切换FXML文件后(所有FXML文件都具有相同的Controller),有什么方法可以保持FXML文件控制器的相同属性?
为了简单起见,我正在使用JavaFX使用GUI制作Simon Says游戏,因此,作为一种后端,我制作了一个“ Game-Engine”,它具有游戏的所有内部功能。因此,随着游戏的计划,我有多个屏幕,这些屏幕取决于在先前屏幕中选择的设置,因此正在配置此引擎。因为设计的舒适性,所以我使用Scene Builder在不同的FXML文件中设计了多个屏幕,所有这些屏幕都使用相同的控制器。问题在于,当切换FXML文件时,控制器将再次重新初始化。控制器将引擎用作属性,因此该引擎会像控制器一样再次重新初始化。因此,我正在寻找一种方法来使引擎保持与第一次初始化时相同的方式。
我将放置控制器类的基本方法,应用程序类除基础知识外没有其他行。
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.animation.FadeTransition;
import javafx.animation.SequentialTransition;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Arc;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author etopo
*/
public class Controller implements Initializable {
private GameEngine simon = new GameEngine(); //this line was in the first time in the init method.
/*
* Method which initialize another screen/FXML File
*/
@FXML
private void inicializaUnJugador(ActionEvent event) {
simon.setMultijugador(false);
try {
switchScene(event, "LevelChooser.fxml");
} catch (IOException ex) {
System.err.println("Archivo mal definido");
}
}
@FXML
private void inicializaMultijugador(ActionEvent event){
simon.setMultijugador(true);
try{
switchScene(event, "LevelChooser.fxml");
} catch (IOException ex){
System.err.println("Archivo mal definido");
}
}
private void switchScene(ActionEvent event, String url) throws IOException{
FXMLLoader loader = new FXMLLoader(getClass().getResource(url));
//loader.setController(this);
Parent padre = loader.load();
Scene switcher = new Scene(padre);
Stage manager = (Stage)((Node)event.getSource()).getScene().getWindow();
manager.setScene(switcher);
manager.show();
}
@FXML
private void backToMain(ActionEvent event){
simon.clear();
try{
switchScene(event, "TitlePage.fxml");
}catch(IOException ex){
System.err.println("Archivo Mal definido");
}
}
@FXML
private void EasyGame(ActionEvent event){
simon.setDificultad(Dificultad.EASY);
try{
switchScene(event, "EasyGame.fxml");
}catch(IOException ex){
System.err.println("Archivo mal definido");
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
//Font nes = Font.loadFont(Controller.class.getResource("fonts/kongtext.ttf").toExternalForm(), 20);
//simon = new GameEngine();
}
所以我期望的是,当单击相应按钮时,引擎在任何屏幕上都保持相同的值。