[英]JavaFX, Open a Screen in same Window
我正在尝试实现一个具有简单导航的应用程序。 一个主菜单,三个子菜单,每个菜单另外三个子菜单。
我需要应用程序在与Mainmenu作为根屏幕的同一窗口中递归地打开每个子菜单。 通过每个子菜单上的“返回”按钮,我必须能够返回该菜单。
我为每个(!)菜单和子菜单实现了Main类,Controller类和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打开一个新窗口)。
有任何想法吗? 还是一个相对简单的教程(我不必更改整个代码)?
谢谢!
在根目录处有一个空的控制器(或者可能有一个空的锚定窗格),并使其打开其他控制器并将其添加到当前窗格中?
我目前有一个类似的设置,但是有一个选项卡窗格:每个模块都加载到一个单独的选项卡中。 每个模块本身都有一个fxml文件,一个控制器等。核心代码为每个模块动态创建新选项卡等并加载它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.