JavaFX how to change stage

后端 未结 4 1219
不知归路
不知归路 2021-01-31 11:51

I\'m using Netbeans 7.2 with Scene Builder 1.0 to develop a JavaFX application. I have my main screen set up, and I want to have it so I click a button and it\'ll close the main

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-31 12:41

    Download JavaFX samples find the project FXML-LoginDemo , that's what you need. For quick reference i am copy pasting main java class here ;)

    /*
     * Copyright (c) 2008, 2011 Oracle and/or its affiliates.
     * All rights reserved. Use is subject to license terms.
     *
     * This file is available and licensed under the following license:
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     *  - Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *  - Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in
     *    the documentation and/or other materials provided with the distribution.
     *  - Neither the name of Oracle Corporation nor the names of its
     *    contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    package demo;
    
    import demo.model.User;
    import demo.security.Authenticator;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.JavaFXBuilderFactory;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    /**
     * Main Application. This class handles navigation and user session.
     */
    public class App extends Application {
        private Stage stage;
        private User loggedUser;
    
        private static App instance;
    
        public App() {
            instance = this;
        }
    
        public static App getInstance() {
            return instance;
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override public void start(Stage primaryStage) {
            try {
                stage = primaryStage;
                gotoLogin();
                primaryStage.show();
            } catch (Exception ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        public User getLoggedUser() {
            return loggedUser;
        }
    
        public boolean userLogging(String userId, String password){
            if (Authenticator.validate(userId, password)) {
                loggedUser = User.of(userId);
                gotoProfile();
                return true;
            } else {
                return false;
            }
        }
    
        public void userLogout(){
            loggedUser = null;
            gotoLogin();
        }
    
        private void gotoProfile() {
            try {
                replaceSceneContent("profile.fxml");
            } catch (Exception ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        private void gotoLogin() {
            try {
                replaceSceneContent("login.fxml");
            } catch (Exception ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        private Parent replaceSceneContent(String fxml) throws Exception {
            Parent page = (Parent) FXMLLoader.load(App.class.getResource(fxml), null, new JavaFXBuilderFactory());
            Scene scene = stage.getScene();
            if (scene == null) {
                scene = new Scene(page, 700, 450);
                scene.getStylesheets().add(App.class.getResource("demo.css").toExternalForm());
                stage.setScene(scene);
            } else {
                stage.getScene().setRoot(page);
            }
            stage.sizeToScene();
            return page;
        }
    }
    

提交回复
热议问题