Olá pessoal,
Estou precisando fazer uma transição de uma tela para outra. Tenho um método simples de carregamento de telas que funciona quando passo da minha primeira para uma segunda, porém, se tento passar da segunda para uma tarceira eu já não consigo.
O método de transição fica na Main e gera o cache de telas lá, dessa forma imagino que eu tenha que criar um carregamento na tela que funciona como intermediária entre a primeira e a terceira (onde terão campos de preenchimento) - essa segunda é apenas uma tela de opções - opção Adicionar Paciente e opção Pacientes Cadastrados, e o voltar, que vai pra tela home (a primeira).
package controller;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.util.ArrayList;
public class Main extends Application {
private static Stage stage;
private static Scene homeScreen;
private static Scene agendaScreen;
private static Scene pacienteAcaoScreen;
private static Scene pacienteCadastroScreen;
private static Scene pacienteCadastradoScreen;
private static Scene laudosScreen;
private static Scene recibosScreen;
@Override
public void start(Stage primaryStage) throws Exception{
stage = primaryStage;
primaryStage.setTitle("Sistema Organizador");
//preparando cache de telas
Parent fxmlHome = FXMLLoader.load(getClass().getResource("../view/home-screen.fxml"));
homeScreen = new Scene(fxmlHome, 1366,768);
Parent fxmlAgenda = FXMLLoader.load(getClass().getResource("../view/agenda-screen.fxml"));
agendaScreen = new Scene(fxmlAgenda, 1366,768);
Parent fxmlPacienteAcao = FXMLLoader.load(getClass().getResource("../view/paciente-acao-screen.fxml"));
pacienteAcaoScreen = new Scene(fxmlPacienteAcao, 1366,768);
// Parent fxmlPacienteCadastro = FXMLLoader.load(getClass().getResource("…/view/paciente-cadastro-screen"));
// pacienteCadastroScreen = new Scene(fxmlPacienteCadastro, 1366, 768);
// Parent fxmlPacienteCadastrado = FXMLLoader.load((getClass().getResource("…/view/paciente-cadastrado-screen")));
// pacienteCadastradoScreen = new Scene((fxmlPacienteCadastrado,1366,768);
Parent fxmlLaudos = FXMLLoader.load(getClass().getResource("../view/laudos-screen.fxml"));
laudosScreen = new Scene(fxmlLaudos, 1366,768);
Parent fxmlRecibos = FXMLLoader.load(getClass().getResource("../view/recibos-screen.fxml"));
recibosScreen = new Scene(fxmlRecibos, 1366,768);
//inicializando o cache "home"
primaryStage.setScene(homeScreen);
primaryStage.show();
}
public static void **changeScreen**(String src){
switch (src){
case "home":
stage.setScene(homeScreen);
break;
case "agenda":
stage.setScene(agendaScreen);
break;
case "paciente":
stage.setScene(pacienteAcaoScreen);
break;
// case “pacienteCadastro”:
// stage.setScene(pacienteCadastroScreen);
// break;
case “laudos”:
stage.setScene(laudosScreen);
break;
case “recibo”:
stage.setScene(recibosScreen);
break;
case “pacienteCadastrados”:
stage.setScene(pacienteCadastradoScreen);
break;
}
}
public static void main(String[] args) {
launch(args);
}
//----------------------------------------------------------------
private static ArrayList<OnChangeScreen> listeners = new ArrayList<>();
public static 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){
}
}
}
A minha ideia seria repetir a Main dentro do controlador da tela de ações como no código abaixo
package controller;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class PacienteAcaoController extends Main{
@FXML
protected void btnPacienteCadastrado(ActionEvent event){
Main.changeScreen("home");
}
@FXML
protected void btnAdicionarPaciente(ActionEvent event){
Main.changeScreen("pacienteCadastro");
}
@FXML
protected void btnVoltar(ActionEvent event){
Main.changeScreen("home");
}
// @Override
// public void start(Stage primaryStage) throws Exception{
// private static Stage stage;
//
// primaryStage.setTitle(“Sistema Organizador”);
//
// //preparando cache de telas
// Parent fxmlPacienteAcao = FXMLLoader.load(getClass().getResource("…/view/paciente-acao-screen.fxml"));
// pacienteAcaoScreen = new Scene(fxmlPacienteAcao, 1366,768);
//
// Parent fxmlPacienteCadastro = FXMLLoader.load(getClass().getResource("…/view/paciente-cadastro-screen"));
// pacienteCadastroScreen = new Scene(fxmlPacienteCadastro, 1366, 768);
//
//
// //inicializando o cache “home”
// primaryStage.setScene(fxmlPacienteAcao);
// primaryStage.show();
//
// }
//
// public static void changeScreen(String src){
// switch (src){
// case “pacienteCadastro”:
// stage.setScene(pacienteCadastroScreen);
// break;
// case “pacienteCadastrados”:
// stage.setScene(pacienteCadastradoScreen);
// break;
// case “pacienteCadastrados”:
// stage.setScene(pacienteCadastradoScreen);
// break;
// }
// }
}
- Tem umas partes comentadas,porque eu isolei elas para testar o funcionamento das outras.
Se alguém puder ajudar eu fico muito agradecido