Olá
Tenho uma aplicação em JavaFX que tem a tela de login e deve direcionar para a tela principal. Porém, quando valido o Login, a tela do login PERMANECE.
Tudo funciona corretamente, mas isso não. Como “fechar” o Stage sem fechar toda a aplicação?
Observação: já tentei usar o stage.close();
e o stage.hide();
Não funcionou.
Atualmente, estava tentando criar um Stage separado, por isso minha classe ficou estranha. Segue a classe
public class Main extends Application {
Stage meuStage = new Stage(); // stage que chama o login
Stage meuStage2 = new Stage(); // stage que chama a tela principal
Constante c = new Constante();
DialogFX dialog = new DialogFX(); // criei isso, ignore.
boolean verificador = false;
@FXML TextField txtUsuario; // está vindo de um FXML
@FXML PasswordField txtSenha; // está vindo de um FXML
public void criarTela() { // Chama a tela de login
try {
Pane root = FXMLLoader.load(getClass().getResource("/view/Form_Login.fxml"));
Scene scene = new Scene(root);
meuStage.setTitle("Login");
meuStage.setScene(scene);
meuStage.show();
} catch(Exception e) {
JOptionPane.showMessageDialog(null, "Erro\n"+e.getMessage());
}
}
@FXML
public boolean login() { // Verifica o login
int cont = 0;
try {
Class.forName(c.DRIVER);
Connection conn = DriverManager.getConnection(c.URL, c.USER, c.PASSWORD);
Statement stm = conn.createStatement();
ResultSet result = stm.executeQuery("SELECT COUNT(*) AS cont FROM B001 WHERE "
+ "B001_USUARIO='"+txtUsuario.getText()+"' AND B001_SENHA=md5('"+txtSenha.getText()+"'); ");
while(result.next()) {
cont = result.getInt("cont");
}
if(cont == 1) {
// deve fechar o meuStage e abrir o meuStage2
verificador = true ;
meuStage.close(); // não vai
Pane root = FXMLLoader.load(getClass().getResource("/view/Form_Principal.fxml"));
Scene scene = new Scene(root);
meuStage2.setMinHeight(500);
meuStage2.setMinWidth(800);
meuStage2.setScene(scene);
meuStage2.show();
} else if(cont > 1) {
verificador = false ;
dialog.showDialog("error", "Falha no login", "Registro duplicado", "Por favor, entre em contato com o suporte");
} else if(cont <= 0) {
verificador = false ;
dialog.showDialog("error", "Falha no login", "Registro não encontrado", "Verifique suas credenciais!");
}
} catch (ClassNotFoundException e) {
dialog.showDialog("error", "ClassNotFoundException", "Verifique o driver da conexão", e.getMessage());
} catch (SQLException e) {
dialog.showDialog("error", "SQLException", "Verifique a query da conexão", e.getMessage());
} catch (Exception e) {
dialog.showDialog("error", "Exception", "Entre em contato com o suporte", e.getMessage());
}
return verificador;
}
@Override
public void start(Stage primaryStage) throws Exception {
Main main = new Main();
main.criarTela();
}
public static void main(String[] args) {
launch(args);
}
}