我正在尝试用JavaFx制作PacMan游戏,为此我开始创建一个带有侧窗的菜单,它使用抽屉滑出 .

这个抽屉上有按钮,它被加载到另一个fxml文件中 . 我现在要做的是:当我按下这些按钮(例如:Main,Help,Support)时,我希望我的第一个FXML文件(包含这些窗格)使用.toFront()方法加载这些痛苦 . 我只是不知道如何使用其他FXML控制器访问其他FXML的窗格 .

首先是FXMLController:

package sidemenu;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDrawer;
import com.jfoenix.controls.JFXHamburger;
import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.animation.FadeTransition;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
import sidemenu.panel.SidePanelController;

public class FXMLSideMenuController {

    SideMenu sideMenu = new SideMenu();

    @FXML
    private AnchorPane ap_main;

    @FXML
    private AnchorPane ap_gamefield;

    @FXML
    private Pane pnl_highscore;

    @FXML
    private Pane pnl_main;

    @FXML
    private Pane pnl_credits;

    @FXML
    private Pane pnl_moeilijkheid;

    @FXML
    private VBox vbox_moeilijkheid;

    @FXML
    private JFXButton btn_easy;

    @FXML
    private JFXButton btn_medium;

    @FXML
    private JFXButton btn_hard;

    @FXML
    private Pane pnl_thema;

    @FXML
    private VBox vbox_thema;

    @FXML
    private JFXButton btn_classic;

    @FXML
    private JFXButton btn_xmas;

    @FXML
    private Pane pnl_spelers;

    @FXML
    private JFXButton btn_mraerts;

    @FXML
    private ImageView iview_mraerts;

    @FXML
    private JFXButton btn_mrlemmens;

    @FXML
    private ImageView iview_mrlemmens;

    @FXML
    private AnchorPane ap_sidepane;

    @FXML
    private FontAwesomeIconView iview_home;

    @FXML
    private FontAwesomeIconView iview_spelers;

    @FXML
    private FontAwesomeIconView iview_niveau;

    @FXML
    private FontAwesomeIconView iview_thema;

    @FXML
    private FontAwesomeIconView iview_highscore;

    @FXML
    private FontAwesomeIconView iview_credits;

    @FXML
    private JFXDrawer drawer;

    @FXML
    private JFXHamburger hamburger;

    public void initialize() {
        if (!SideMenu.isSplashLoaded) {
            loadSplashScreen();
        }

        pnl_main.toFront();
        
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/sidemenu/panel/sidepanel.fxml"));
            VBox box = loader.load();
            SidePanelController controller = loader.getController();
            drawer.setSidePane(box);
        } catch (IOException ex) {
            Logger.getLogger(FXMLSideMenuController.class.getName()).log(Level.SEVERE, null, ex);
        }

        HamburgerBackArrowBasicTransition transition = new HamburgerBackArrowBasicTransition(hamburger);
        transition.setRate(-1);
        hamburger.addEventHandler(MouseEvent.MOUSE_PRESSED, (e) -> {
            transition.setRate(transition.getRate() * -1);
            transition.play();

            if (drawer.isOpened()) {
                drawer.close();
            } else {
                drawer.open();
            }
        });
    }
    
    private void loadSplashScreen() {
        try {
            SideMenu.isSplashLoaded = true;

            StackPane pane = FXMLLoader.load(getClass().getResource(("/sidemenu/splash/splash.fxml")));
            ap_main.getChildren().setAll(pane);

            FadeTransition fadeIn = new FadeTransition(Duration.seconds(3), pane);
            fadeIn.setFromValue(0);
            fadeIn.setToValue(1);
            fadeIn.setCycleCount(1);

            FadeTransition fadeOut = new FadeTransition(Duration.seconds(1.5), pane);
            fadeOut.setFromValue(1);
            fadeOut.setToValue(0);
            fadeOut.setCycleCount(1);

            fadeIn.play();

            fadeIn.setOnFinished((e) -> {
                fadeOut.play();
            });

            fadeOut.setOnFinished((e) -> {
                try {
                    AnchorPane parentContent = FXMLLoader.load(getClass().getResource(("/sidemenu/FXMLSideMenu.fxml")));
                    ap_main.getChildren().setAll(parentContent);
                } catch (IOException ex) {
                    Logger.getLogger(FXMLSideMenuController.class.getName()).log(Level.SEVERE, null, ex);
                }
            });

        } catch (IOException ex) {
            Logger.getLogger(FXMLSideMenuController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

第二个FXMLController:

package sidemenu.panel;

import com.jfoenix.controls.JFXButton;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class SidePanelController implements Initializable {
    
    @FXML
    private JFXButton btn_spelers;

    @FXML
    private JFXButton btn_niveau;

    @FXML
    private JFXButton btn_thema;

    @FXML
    private JFXButton btn_highscore;

    @FXML
    private JFXButton btn_credits;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }
    
    @FXML
    private void handleButtonAction(ActionEvent event) {
        if (event.getSource() == btn_spelers) {
            sidemenu.FXMLSideMenuController.pnl_spelers.toFront();
        } else if (event.getSource() == btn_niveau) {
            sidemenu.FXMLSideMenuController.pnl_moeilijkheid.toFront();
        } else if (event.getSource() == btn_thema) {
            sidemenu.FXMLSideMenuController.pnl_thema.toFront();
        } else if (event.getSource() == btn_highscore) {
            sidemenu.FXMLSideMenuController.pnl_highscore.toFront();
        } else if (event.getSource() == btn_credits) {
            sidemenu.FXMLSideMenuController.pnl_credits.toFront();
        }
    }
}

这个handleButtonAction方法应该做我刚才解释的内容 . 请帮忙,谢谢!