Boa tarde. Estou com o seguinte problema:
Há 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, aí 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.