【发布时间】:2014-03-19 12:07:21
【问题描述】:
我正在尝试实现一个具有简单导航的应用程序。一个主菜单,3 个子菜单,每个菜单又有 3 个子菜单。
我需要应用程序在主菜单作为根屏幕的同一窗口中递归地打开每个子菜单。我必须能够通过每个子菜单上的“返回”按钮返回该菜单。
我为每个(!)菜单和子菜单实现了一个主类、一个控制器类和一个 FXML 文件。
例如我的主菜单
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);
}
}
我的主控制器
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 个屏幕和“子屏幕”,它们正在像这样导航(通过 java 打开一个新窗口)。
任何人的想法?或者可能是一个相对简单的教程(我不必更改整个代码)?
谢谢!
【问题讨论】:
标签: java controller javafx stage scene