我试图实现一个应用程序,它有一个简单的导航。一个主菜单,3个子菜单,每个子菜单又有3个子菜单。JavaFX,在同一个窗口中打开一个屏幕
我需要应用程序以Mainmenu作为根屏幕在同一个窗口中递归地打开每个子菜单。我必须能够通过每个子菜单上的“返回”按钮返回到该菜单。
我为每个(!)菜单和子菜单实现了一个Main类,一个Controller类和一个FXML文件。
E.g.我的主菜单
package application;
import org.apache.log4j.Logger;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
public class Main extends Application {
// Initialize Logger
private static final Logger logger = Logger.getLogger(Main.class);
@Override
public void start(Stage primaryStage)
{
try
{
AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("MainFrame.fxml"));
Scene scene = new Scene(root,1000,500);
primaryStage.setScene(scene);
primaryStage.show();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
logger.info("Starting application.");
launch(args);
}
}
我MainController
package application;
import org.apache.log4j.Logger;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class MainFrameController
{
private static final Logger logger = Logger.getLogger(MainFrameController.class);
@FXML
private Button btn_random1;
@FXML
private Button btn_random2;
@FXML
private Button btn_random3;
@FXML
private Button btn_random4;
public void initialize()
{
//mainService = new MainService();
}
@FXML
private void onRandomButton1() throws Exception
{
logger.info("onRandomButton1Clicked");
Stage stage = new Stage();
AnchorPane root;
root = (AnchorPane)FXMLLoader.load(getClass().getResource("RandomFXML1.fxml"));
Scene scene = new Scene(root,1000,500);
stage.setScene(scene);
stage.show();
}
@FXML
private void onRandomButton2()
{
logger.info("onRandomButton1");
}
@FXML
private void onRandomButton3()
{
logger.info("onRandomButton2");
}
@FXML
private void onRandomButton4()
{
Platform.exit();
logger.info("onRandomButton3");
}
}
有没有办法简单地改变我的代码,因此它在同一个窗口打开呢?
我看了几个解决这个问题的相对复杂的方法,我想坚持我的代码,不要改变太多,否则我不得不重新开始。请注意,这只是许多Main/Controller/FXML组合中的一个,我有大约10个屏幕和“subscreens”,它们正在像这样导航(由java打开一个新窗口)。
想法任何人?或者,也许是一个相对简单的教程(我不需要改变我的整个代码)?
谢谢!