我正在尝试用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方法应该做我刚才解释的内容 . 请帮忙,谢谢!