当前位置:   article > 正文

JavaFx 打开一个新窗口和窗口交互(四)_javafx 打开新窗口新增后

javafx 打开新窗口新增后

JavaFx 打开一个新窗口和窗口交互(四)

JavaFX 从入门入门到入土系列
前面我演示的demo都是单个窗口,那么如何实现多个窗口呢?使用Stage secondStage = new Stage();然后secondStage.show();展示即可。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.stage.Stage;

/**
 * @author lingkang
 * @date 2021/9/17 22:29
 * @description
 */
public class WindowsDemo extends Application {
    public void start(Stage stage) throws Exception {
        stage.setTitle("标题");
        stage.getIcons().add(new Image("img/avatar.jpg"));
        stage.setHeight(200);
        stage.setWidth(300);

        Button button = new Button("打开窗口");
        // 添加一个点击事件
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                // 创建新的stage
                Stage newStage = new Stage();
                newStage.setWidth(300);
                newStage.setHeight(200);
                Label label = new Label("新窗口");
                newStage.setScene(new Scene(label));
                // 显示
                newStage.show();
            }
        });
        // 直接添加样式
        button.setStyle("-fx-background-color: red;-fx-text-fill: blue;");
        stage.setScene(new Scene(button));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

效果如下
在这里插入图片描述

那么他们怎么交互呢?

简单关闭第一个窗口可以在显示第二个窗口时调用 stage.close();关闭第一个窗口第一个窗口

Button button = new Button("打开窗口");
        // 添加一个点击事件
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                // 创建新的stage
                Stage newStage = new Stage();
                newStage.setWidth(300);
                newStage.setHeight(200);
                Label label = new Label("新窗口");
                newStage.setScene(new Scene(label));
                // 显示
                newStage.show();
                // 关闭第一个窗口
                stage.close();
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

窗口间交互

窗口间交互通过公共静态map进行,后面的文章我会用RxJava异步事件实现。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @author lingkang
 * @date 2021/9/17 22:29
 * @description
 */
public class WindowsDemo extends Application {

    public static ConcurrentMap<String, Stage> stageManage = new ConcurrentHashMap<>();

    public void start(Stage stage) throws Exception {
        stage.setTitle("标题");
        stage.getIcons().add(new Image("img/avatar.jpg"));
        stage.setHeight(200);
        stage.setWidth(300);

        Button button = new Button("打开窗口");
        // 添加一个点击事件
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                // 创建新的stage
                Stage newStage = new Stage();
                newStage.setWidth(300);
                newStage.setHeight(200);
                Label label = new Label("新窗口");
                newStage.setScene(new Scene(label));
                // 显示
                newStage.show();
                // 关闭第一个窗口
                //stage.close();

                // 放到静态map中共用,从而达到状态管理
                stageManage.put("second", newStage);
            }
        });

        Button closeNewStage = new Button("关闭第二个窗口");
        closeNewStage.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                // 通过共用的map,关闭第二个窗口
                stageManage.get("second").close();
            }
        });

        // 直接添加样式
        button.setStyle("-fx-background-color: red;-fx-text-fill: blue;");
        VBox vBox = new VBox();
        vBox.getChildren().add(button);
        vBox.getChildren().add(closeNewStage);
        stage.setScene(new Scene(vBox));
        stage.show();
        // 放到静态map中共用,从而达到状态管理
        stageManage.put("first", stage);
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

效果
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/191621
推荐阅读
相关标签
  

闽ICP备14008679号