Fechar stage de outra classe

1 resposta
J

Tenho três classes, sendo que a distribuicao é a seguinte:
1- main;
2- controller 2;
3- controller 3;

Sendo que a classe main(1) é resonsavel por chamar o metodo start da classe controller 2.
A classe controller 2 é responsavel por chamar o metodo start da classe controller 3; (Um stage chamando outro, ou seja, duas janelas distintas).

Quando digo start estou dizendo que tenho dois stages diferentes. Sendo que um é para a controller 2 e o outro para a controller 3.

Descobri que para fechar um stage devo usar o metodo .close();. Porem, como faço para a controller 3 fechar o stage que tem start na controller 2? Lembrando que a controller 2 abri a 3.

Tentei colocar o stage publico e chama-lo na classe 3 da seguinte maneira.
public Class Exemplo{
public Stage stage_help;

@FXML
    private void button_menu_showHelp(ActionEvent event) {
        try {
             stage_help = new Stage();

            Parent root = FXMLLoader.load(getClass().getResource("/br/com/calculator/view/Help.fxml"));
            Scene scene_help = new Scene(root);

            scene_help.setFill(Color.web("#dfdfdf"));

            stage_help.setTitle("Ajuda");
            stage_help.initStyle(StageStyle.UTILITY);
            stage_help.setScene(scene_help);
            stage_help.show();
        } catch (IOException ex) {
            Logger.getLogger(CalculatorController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
publlic class Exemplo2{

@FXML
    private void button_function_ok(ActionEvent event) {
        Exemplo1 a = new Exemplo1();
        a.stage_help.close();
    }
}

Só que não funcionou. Cmo eu poderia fazer isso?

1 Resposta

Valkyrium

Olá Johnny, tudo bem?

Bom, você pode trabalhar com as Stages de forma estática, lembrando de trabalhar suas telas com a classe Application.

Exemplo:

public class Exemplo1 extends Application {

  private static Stage stage;

  @Override
  public void start(Stage stage) throws Exception {
    // Lógica de inicialização da tela
    Exemplo1.stage = stage;
  }

  @FXML
  protected void bt_ok(ActionEvent evt) throws Exception {
    new Exemplo2().start(new Stage());
  }

  public static Stage getStage() {
    return stage;
  }

  public static void main(String[] args) {
    launch(args);
  }

}
public class Exemplo2 extends Application {

  @Override
  public void start(Stage stage) throws Exception {
    // Lógica de inicialização da tela
  }

  @FXML
  protected void bt_ok(ActionEvent evt) {
    Exemplo1.getStage().close();
  }

}

Veja se ajuda...

Até mais! :D

Criado 15 de agosto de 2013
Ultima resposta 20 de ago. de 2013
Respostas 1
Participantes 2