我正在做一个项目,我必须根据用户输入切换场景。目前我有一个Gui-Class,它是一个应用程序并加载第一个fxml-File,它由MainController类启动:
public class MainController {
public MainController() {
Application.launch(Gui.class);
}
}
Gui-Class:
public class Gui extends Application{
Stage primaryStage;
//I wanna ideally use this method to switch scenes
public void switchen(String nextScene) throws Exception
{
Parent nextS;
if(nextScene.equals("singleMenue"))
{
nextS = FXMLLoader.load(getClass().getResource("SingleMenue.fxml"));
primaryStage.hide();
primaryStage.setScene(new Scene(nextS, 900, 600));
primaryStage.show()
}
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
Parent decisionScene = FXMLLoader.load(getClass().getResource("Decision.fxml"));
primaryStage.setTitle("title");
primaryStage.setScene(new Scene(decisionScene, 900, 600));
primaryStage.show();
}
我还为每个.fxml文件设置了一个不同的Controller类(这是第一个):
public class DecisionController {
@FXML
private Button singleButton;
@FXML
private Button multiButton;
public DecisionController() {
}
@FXML
private void buttonPressed(ActionEvent event) throws IOException
{
if(event.getSource() == singleButton)
{
System.out.println("single");
// I wanna somehow call switch("singleMenue"); here
}
else if(event.getSource() == multiButton)
{
System.out.println("multi");
}
}
}
那么如何从Controller内部切换场景呢?
我试图通常使用MVC模式,但我不知道我的DecisionController-Object应该如何调用Gui-Application中的方法。我需要在这里进入一个正在运行的线程,对吗? 我也不知道如何将我的Gui-Instance转交给DecisionController,因为后者是从Decision.fxml初始化的。
我尝试的另一件事是直接从DecisionController切换场景:
@FXML
private void buttonPressed(ActionEvent event) throws IOException
{
if(event.getSource() == singleButton)
{
System.out.println("single");
Stage mainstage = (Stage) singleButton.getScene().getWindow();
Parent singleScene = FXMLLoader.load(getClass().getResource("SingleMenue.fxml"));
mainstage.setScene(new Scene(singleScene, 900, 600));
}
else if(event.getSource() == multiButton)
{
System.out.println("multi");
}
}
这是可以理解的,因为无法从应用程序线程外部进行操作。
我对JavaFX& FXML所以我对程序结构的一般想法可能完全错误,也许这不是你的MVC。非常感谢任何反馈:)