Я создаю настольную игру с JavaFX. У меня есть два контроллера для моего проекта и хотел бы получить доступ к переменным и методам от главного контроллера. Мой главный контроллер имеет большую часть логики игры и пользовательского интерфейса, но мне бы хотелось иметь всплывающее окно для особых случаев. Прямо сейчас у меня есть всплывающее окно, но хотелось бы использовать переменные из главного контроллера в всплывающем окне контроллера. Я смог получить переменные от вторичного контроллера к главному контроллеру, но не наоборот. Любая помощь будет оценена по достоинству.Получить переменные от главного контроллера
Вот код в главном контроллере, который открывает новое всплывающее окно:
public void newWindow() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("player.fxml"));
//Parent root = fxmlLoader.load();
Stage playerStage = new Stage();
playerStage.setTitle("Pick your move");
playerStage.initStyle(StageStyle.UNDECORATED);
playerStage.setScene(new Scene((Pane) fxmlLoader.load()));
playerStage.show();
ControllerPopup controller =
fxmlLoader.<ControllerPopup>getController();
this.controller = controller;
if(currentCard.getMoves() == 10){
controller.handleTen();
}
else if(currentCard.getMoves() == 11){
controller.handleEleven();
}
else{
controller.handleSeven();
}
disablePawns(bluePawns);
} catch (Exception e) {
e.printStackTrace();
}
}
А вот вторичный контроллер:
public class ControllerPopup implements Initializable{
@FXML
private RadioButton button1,button2,button3,button4;
@FXML
private Button closeButton;
private RadioButton selectedButton;
private ToggleGroup group;
Controller controller;
@Override
public void initialize(URL location, ResourceBundle resources) {
group = new ToggleGroup();
button1.setToggleGroup(group);
button2.setToggleGroup(group);
button3.setToggleGroup(group);
button4.setToggleGroup(group);
}
public void handleTen(){
button1.setSelected(true);
button1.setText("Move forward 10");
button2.setText("Move backwards 1");
button3.setDisable(true);
button4.setDisable(true);
}
public void handleEleven(){
button1.setSelected(true);
button1.setText("Swap with another pawn");
button2.setText("Move forward 11");
button3.setDisable(true);
button4.setDisable(true);
}
public void handleSeven(){
button1.setSelected(true);
button1.setText("Move forward 1 and 6");
button2.setText("Move forward 2 and 5");
button3.setText("Move forward 3 and 4");
button4.setText("Move forward 7");
}
@FXML
public void handleCloseButtonAction(ActionEvent event) {
selectedButton = (RadioButton) group.getSelectedToggle();
Stage stage = (Stage) closeButton.getScene().getWindow();
stage.close();
}
public RadioButton getSelectedButton(){
return selectedButton;
}
Какие переменные вы используете хотите получить доступ? Почему вы не можете просто передать свои значения с главного контроллера на «вторичный» контроллер: 'controller.setXXX (...);'? –
Да, это решило! Спасибо .. Не знаю, почему я об этом не думал. – John