Fechar Scene

192 views
Skip to first unread message

Jonatan Passo

unread,
Nov 25, 2015, 6:43:56 PM11/25/15
to JavaFX-BR
Boa tarde pessoal, estou fazendo meu primeiro projeto em JavaFX e me esbarrei com uma dificuldade.
Tenho uma tela de login na gual eu defini que seria a primeira a ser aberta no meu Main.

Porem quero fazer a seguinte situação.

Ao logar quero que o login suma e outra janela que criei chamada inicio.fxml, seja exibida... 

Estou conseguindo fazer com que a tela inicio seja exibida, porem a tela de login fica por traz.

Percebi que se eu fecho a tela de login todas as outras telas também fecha já que ela é a que esta amarrada à aplicação executada.

Quem puder me dar uma força agradeço.

Junior Tada

unread,
Dec 1, 2015, 11:56:38 AM12/1/15
to JavaFX-BR
Vc precisa fazer um replace de .fxml e não fechar o stage. No site da oracle/javafx tem um pacote de exemplos pra baixar que tem um código para criar uma tela de login.

Junior Tada

unread,
Dec 1, 2015, 12:02:22 PM12/1/15
to JavaFX-BR
Algo +- assim:

private Parent replaceSceneContent(String fxml, double width, double height) throws Exception {
        Parent page = (Parent) FXMLLoader.load(AppOtica_v2.class.getResource(fxml), null, new JavaFXBuilderFactory());
        Scene scene = stage.getScene();
        if (scene == null) {
            scene = new Scene(page, width, height);
            scene.getStylesheets().add(AppOtica_v2.class.getResource("estilo.css").toExternalForm());
            stage.setScene(scene);
        } else {
            page.resize(width, height);
            stage.getScene().setRoot(page);
        }
        page.resize(width, height);
        stage.sizeToScene();
        return page;
    }

    public void goToLogin() {
        // Tela de Login
        try {
            replaceSceneContent("/view/login.fxml", 800, 600);
            stage.setMinWidth(800);
            stage.setMinHeight(600);
        } catch (Exception ex) {
            Logger.getLogger(AppOtica_v2.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void gotoPrincipal() {
        // Tela Inicial
        try {
            replaceSceneContent("/view/principal_old.fxml", 1366, 768);
            stage.setMinWidth(1024);
            stage.setMinHeight(768);
            stage.centerOnScreen();
            //Fullscreen like mediaplayer
            //stage.setFullScreen(true);
        } catch (Exception ex) {
            Logger.getLogger(AppOtica_v2.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

No seu controller.login, se estiver correto vc chama outra tela.. (index, etc) implementando um método que utilize o replaceSceneContent.
Reply all
Reply to author
Forward
0 new messages