Я пытаюсь сделать игру PacMan на JavaFx, и для этого я начал создавать меню с боковой панелью, которая выдвигается из ящика.
В этом ящике есть кнопки, которые загружаются в другое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 должен делать то, что я только что объяснил выше.Пожалуйста, помогите, спасибо!