如何在JavaFx應(yīng)用中打開新的窗口

有時(shí)候,我們可能有這樣的需求——點(diǎn)擊按鈕時(shí)能夠彈出新的窗口,然后在這個(gè)窗口中提供一些服務(wù)。那么在JavaFX中如何實(shí)現(xiàn)呢?

其實(shí),在JavaFX彈出新的窗口原理很簡單,就是再新建一個(gè)Stage,如下代碼實(shí)現(xiàn)點(diǎn)擊按鈕打開新的窗口,即在按鈕的鼠標(biāo)點(diǎn)擊事件中新建了一個(gè)Stage

package pre.huangjs.blog;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class OpenNewWindow extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        // 創(chuàng)建一個(gè)包含按鈕的APP
        Button newWindowBtn = new Button("打開新的窗口");

        // 為按鈕添加事件——點(diǎn)擊時(shí)打開新的窗口
        newWindowBtn.setOnMouseClicked(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {

                // 創(chuàng)建新的stage
                Stage secondStage = new Stage();
                Label label = new Label("新窗口"); // 放一個(gè)標(biāo)簽
                StackPane secondPane = new StackPane(label);
                Scene secondScene = new Scene(secondPane, 300, 200);
                secondStage.setScene(secondScene);
                secondStage.show();
            }
        });

        StackPane mainPane = new StackPane(newWindowBtn); // 創(chuàng)建一個(gè)新的布局
        Scene scene = new Scene(mainPane, 500, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

01.gif

現(xiàn)在基本實(shí)現(xiàn)了我們的功能,但是還是存在一個(gè)不足,我們?cè)陉P(guān)閉主窗口primaryStage時(shí),打開的secondStage不會(huì)自動(dòng)關(guān)閉,這個(gè)不太合理,如果想達(dá)到主窗口關(guān)閉時(shí)子窗口關(guān)閉,那么需要設(shè)置主窗口的setOnCloseRequest(EventHandler<WindowEvent> value)方法,具體代碼:


    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>(){
            public void handle(WindowEvent event) {
                Platform.exit();
            }
        });

02.gif

JavaFX初學(xué)者,如有術(shù)語使用不正確,請(qǐng)指正!

完整代碼:

package pre.huangjs.blog;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class OpenNewWindow extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        // 創(chuàng)建一個(gè)包含按鈕的APP
        Button newWindowBtn = new Button("打開新的窗口");

        // 為按鈕添加事件——點(diǎn)擊時(shí)打開新的窗口
        newWindowBtn.setOnMouseClicked(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {

                // 創(chuàng)建新的stage
                Stage secondStage = new Stage();
                Label label = new Label("新窗口"); // 放一個(gè)標(biāo)簽
                StackPane secondPane = new StackPane(label);
                Scene secondScene = new Scene(secondPane, 300, 200);
                secondStage.setScene(secondScene);
                secondStage.show();
            }
        });

        StackPane mainPane = new StackPane(newWindowBtn); // 創(chuàng)建一個(gè)新的布局
        Scene scene = new Scene(mainPane, 500, 400);
        primaryStage.setScene(scene);
        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>(){
            public void handle(WindowEvent event) {
                Platform.exit();
            }
        });
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評(píng)論 25 709
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,678評(píng)論 9 468
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,334評(píng)論 0 17
  • 還想看更多文章的朋友可以訪問我的個(gè)人博客 轉(zhuǎn)載自人人網(wǎng)分享 想查看更多精彩文章,請(qǐng)關(guān)注我的 卷首語 Android...
    我是才子閱讀 42,109評(píng)論 1 8
  • 我?是誰呀?不是你不是她,可“我”到底是個(gè)怎樣的存在?不清楚。 一晃我就十七了,以前的有些東西我都模糊了甚至是忘記...
    程殊閱讀 215評(píng)論 0 2

友情鏈接更多精彩內(nèi)容