2016-12-05 2 views
0

У меня есть класс под названием «Ресторан», в котором есть файл FXML, в этом классе у меня есть кнопка, которая при нажатии открывает другое окно, называемое таблицами, которое также имеет файл FXML, у меня есть кнопку минимизации в окне таблиц.Как добавить кнопку в другой класс

Что я хочу, когда я нажимаю кнопку «Свернуть» в таблице, новая кнопка будет добавлена ​​в окно ресторана.

Но я получаю пустое исключение. Может кто-нибудь помочь мне решить эту проблему.

Это код моей кнопки минимизации:

@FXML 
public void minimiza(ActionEvent event) { 
    Button Tables = new Button("Mesas"); 
    try { 
     Stage mesa = (Stage) ((Button) event.getSource()).getScene().getWindow(); 
     mesa.setIconified(true); 
     FXMLLoader loader = new FXMLLoader(); 
     RestauranteController controle = loader.getController(); 
     controle.adicionaBotao(Tables); 
    } catch (Exception e) { 
     System.out.println("Not working " + e.getMessage()); 
    } 
} 

ответ

0

Это, вероятно, лучше просто слушать iconified свойство Stage от Restaurant класса. Если сведено к минимуму состояние не соответствует состоянию iconified, вы можете создать это свойство в контроллере для окна tables самостоятельно.

private int windowCount; 

@Override 
public void start(Stage primaryStage) { 

    Button btn = new Button("Show new Window"); 
    VBox buttonContainer = new VBox(btn); 

    btn.setOnAction((ActionEvent event) -> { 
     // create new window 
     windowCount++; 
     Label label = new Label("Window No " + windowCount); 
     Stage stage = new Stage(); 
     Scene scene = new Scene(label); 
     stage.setScene(scene); 

     // button for restoring from main scene 
     Button restoreButton = new Button("Restore Window " + windowCount); 

     // restore window on button click 
     restoreButton.setOnAction(evt -> { 
      stage.setIconified(false); 
     }); 

     // we rely on the minimize button of the stage here 

     // listen to the iconified state to add/remove button form main window 
     stage.iconifiedProperty().addListener((observable, oldValue, newValue) -> { 
      if (newValue) { 
       buttonContainer.getChildren().add(restoreButton); 
      } else { 
       buttonContainer.getChildren().remove(restoreButton); 
      } 
     }); 
     stage.show(); 
    }); 


    Scene scene = new Scene(buttonContainer, 200, 200); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

КСТАТИ: Обратите внимание, что без загрузки FXML, FXMLLoader никогда не будет создавать экземпляр контроллера, не говоря уже без FXML уточняются. Кроме того, ни при каких обстоятельствах он не возвратит тот же экземпляр контроллера, что и тот, который используется в вашем окне Restaurant.

+0

Все прошло отлично! Спасибо, Фабиан –