Problema com eventos JAVAFX

0 respostas
javafx
D
Boa tarde. Estou com o seguinte problema:

 algum tempo assisti algumas vídeo aulas de transição de telas (gostei muito das aulas) no youtube. Na ocasião o instrutor criou um observer para ficar cuidando das trocas de tela, acontece que eu mudei um pouco o código e ao invés de trocar a scene como ele tava fazendo nas vídeo aulas, eu estou abrindo novas janelas. O Erro: o evento observer somente funciona se eu abrir a nova janela a partir do botão, fechar ela no x do canto superior direito da tela e abrir novamente a mesma tela apertando o botão,  sim ele manda o evento para cuidar das telas. Segue o código:

public static void changeScreen(String scr, Object userData) {

    switch(scr) {

        case main:

            <a href="//stage.setScene">//stage.setScene</a>(mainScene);

            notifyAllListeners(main, userData);

            System.out.println("////MAIN");
break;

        case “cheques”:

            <a href="//stage.setScene">//stage.setScene</a>(chequeScene);

            notifyAllListeners(“cheques”, userData);

            System.out.println("////cheques");
break;

        case “chequesAdicionar”:

            <a href="//stage.setScene">//stage.setScene</a>(chequeAdicionarScene);

            notifyAllListeners(“chequesAdicionar”, userData);

            System.out.println("////chequesAdicionar");
break;

        case TelaAdicionarCliente”:

            notifyAllListeners(TelaAdicionarCliente”, userData);

            System.out.println("////TelaAdicionarCliente");
break;

    }

}
public static void changeScreen(String scr) {

    changeScreen(scr, null);

}

public static void main(String[] args) {

launch(args);

}

//------------Observer-------------//
private static ArrayList<onChangeScreen> listeners = new ArrayList();

public interface onChangeScreen {

    void onScreenChanged(String newScreen, Object userData);

}
public static void addOnChangeScreenListener(onChangeScreen newListener) {

    listeners.add(newListener);

}
private static void notifyAllListeners(String newScreen, Object userData) {

    for(onChangeScreen l : listeners) {

        l.onScreenChanged(newScreen, userData);

    }

}

//----------Observer Fim-----------//

O código acima está na classe MAIN.



O código abaixo abre a nova janela.------------------------


public void btAdicionarCliente(ActionEvent e) {
try {
if(cliente!=null) {
//System.out.println(cliente + “AQUI”);
Main.changeScreen(“TelaAdicionarCliente”, cliente);
} else {
Main.changeScreen(“TelaAdicionarCliente”);
}
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().getResource(“TelaAdicionarCliente.fxml”));
Parent root1 = fxmlLoader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root1));
stage.initModality(Modality.APPLICATION_MODAL);
stage.setTitle(“POSTO ESTADIO - Adicionar Cliente”);
stage.setResizable(false);
stage.setMaximized(false);
stage.show();
stage.setOnCloseRequest((WindowEvent event1) -> {
Main.changeScreen(“chequesAdicionar”);
});
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}


O Código abaixo é o initialize da nova janela, que só executa o evento se eu fechar a janela e abrir de novo.
Main.addOnChangeScreenListener(new Main.onChangeScreen() {

<a class="mention" href="/u/override">@Override</a>

    public void onScreenChanged(String newScreen, Object userData) {

        System.out.println("TELA: "+newScreen + “, DADO:” +userData);

if(newScreen.equals(“TelaAdicionarCliente”)) {
System.out.println(“TelaAdicionarCliente”);

if(userData!=null) {
TelaAdicionarClienteNovo.cliente = (Clientes) userData;

} else {

                TelaAdicionarClienteNovo.cliente=null;

            }

        }

    }

});

Realmente não sei pq isso tá acontecendo. Alguém imagina?

Obrigado.

Criado 21 de março de 2019
Respostas 0
Participantes 1