簡體   English   中英

JavaFX,在同一窗口中打開一個屏幕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM