2016-04-22 3 views
0

Я создаю настольную игру с 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; 
    } 
+0

Какие переменные вы используете хотите получить доступ? Почему вы не можете просто передать свои значения с главного контроллера на «вторичный» контроллер: 'controller.setXXX (...);'? –

+0

Да, это решило! Спасибо .. Не знаю, почему я об этом не думал. – John

ответ

0

Вы можете просто создать соответствующие методы, установленных в «вторичный» контроллер и передать им значения от главного контроллера:

controller.setXXX(...); 
Смежные вопросы