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);
}
}
效果如下
那么他们怎么交互呢?
简单关闭第一个窗口可以在显示第二个窗口时调用 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();
}
});
窗口间交互
窗口间交互通过公共静态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);
}
}
效果
JavaFx 打开一个新窗口和窗口交互(四)的更多相关文章
- windbg学习---.browse打开一个新的command 窗口
.browse r eax .browse <command>将会显示新的命令浏览窗口和运行给出的命令
- Window.open 实现导航与打开窗口,导航到一个特定链接地址,也可以打开一个新的浏览器窗体
语法 window.open(strUrl,strWindowName,strWindowFeatures ,replace) strUrl: 打开资源的地址 strWindowName: 表示窗体名 ...
- JS 点击元素发ajax请求 打开一个新窗口
JS 点击元素发ajax请求 打开一个新窗口 经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打 ...
- vue中使用router打开一个新的窗口
一个单页应用打开一个新的窗口不是很好控制,比如权限的处理,因为原先的页面不会自动刷新,方法很简单: let routeData = this.$router.resolve({ name: " ...
- 使用javascript打开一个新页而不被浏览器屏蔽
使用javascript打开一个新页面可以有几种方式,但各有利弊,以下做下分析 1.window.open(url) 这是新手最常用的方法,好处是简单易用,坏处,很简单,会被很多浏览器拦截而导致功能失 ...
- 在做爬虫或者自动化测试时新打开一个新标签页,必须使用windows切换
在做爬虫或者自动化测试时,有时会打开一个新的标签页或者新的窗口,直接使用xpath定位元素会发现找不到元素,在firefox中定位了元素还是找不到, 经过多次发现,在眼睛视野内看到这个窗口是在最前面, ...
- Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法
VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...
- Android课程---Oracle VM VirtualBox出现不能为虚拟机打开一个新任务
因工作需要在Win7下增添了Win7虚拟系统,随着VirtualBox 4.326的版本更新,用户们也开始升级.一用户在升级后发现原来创建的虚拟机无法打开,提示信息为:不能为虚拟电脑win7打开一个新 ...
- VirtualBox不能为虚拟电脑 Ubuntu 打开一个新任务
今天在用Vbox中的Ubuntu系统准备测试Python代码时,Vbox报了一个错误:"不能为虚拟电脑 Ubuntu 打开一个新任务".因为之前用的时候还好好的,也不知道是不是最近 ...
- 不能为虚拟电脑 ubuntu 打开一个新任务.
使用virtualbox报错: 不能为虚拟电脑 ubuntu3 打开一个新任务. The virtual machine 'ubuntu3' has terminated unexpectedly d ...
随机推荐
- 原创基于Scrum框架产研团队运作20问
学习完了 Scrum,实际使用中,是否遇到/思考过下面的问题? Product Owner的老板是谁.谁来给 Product Owner打绩效.考核的标准是啥? Scrum Master 的老板是谁. ...
- C#学习笔记--面向对象三大特征
C#核心 面向对象--封装 用程序来抽象现实世界,(万物皆对象)来编程实现功能. 三大特性:封装.继承.多态. 类与对象 声明位置:namespace中 样式:class 类名{} 命名:帕斯卡命名法 ...
- 产品代码都给你看了,可别再说不会DDD(七):实体与值对象
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- 虹科干货 | 零售业数智升级不掉队,get数据,get未来!
电商崛起,传统零售行业危机四伏,全渠道盈利与可持续化成为难点,库存管理这块难啃的"硬骨头"也同样让零售商倍感压力...... 背腹受敌的零售商,如何才能在数字化转型道路上避免利润缩 ...
- Python 面向对象编程:类、对象、初始化和方法详解
Python 是一种面向对象的编程语言.在 Python 中,几乎所有东西都是对象,都具有其属性和方法. 类似于对象构造函数或用于创建对象的"蓝图"的类. 创建一个类 要创建一个类 ...
- YbtOJ 数位DP G.幸运666
日常写点奇奇怪怪的乱搞做法 awa 这题跟前面几道数位 DP 的区别在于让求第 \(n\) 小的数. 虽然我不会求也不想学这个,但我们可以 binary search! 问题就转换为求 \([1,mi ...
- 【MISC】[MoeCTF 2022]cccrrc --crc32爆破
附件下载下来为压缩包,需要密码,查看该压缩包的内容 此处发现里面四个txt文件均已被加密,但是每个txt的内容都只有四个字节,符合crc32爆破条件,直接上脚本: import binascii im ...
- MySQL数据库的四大语言
DDL数据定义语言 DDL(Data Definition Languages) : 数据定义语言,用来定义数据库的对象(数据库,表,字段)建改库建改表 DDL代码演示 DML数据操作语言 DML(D ...
- python列表添加元素之append()函数和insert()函数
append()函数 在列表中添加新元素时,最简单的方法就是附加在末尾: list_1 = ['one', 'two', 'three'] print(list_1) list_1.append('f ...
- 【JSOI2008】火星人 (哈希+Splay)
题目 这种含有修改操作的就难以用后缀数组实现了,求LCP这种区间相等的类型可以想到用hash判断,同时LCP的答案大小符合二分条件可以二分求出,如果只有修改可以用线段树维护,因为还有有插入操作所以想到 ...