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