我試圖實現一個應用程序,它有一個簡單的導航。一個主菜單,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打開一個新窗口)。
想法任何人?或者,也許是一個相對簡單的教程(我不需要改變我的整個代碼)?
謝謝!