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 ...
随机推荐
- 【稳定性】关于缩短MTTR的探索
一.什么是 MTTR ? 当系统出现系统故障时,我们需要通过一些指标来衡量故障的严重程度和影响范围.其中MTTR(Mean Time To Repair 名为_平均修复时间_)是一个非常重要的指标,它 ...
- Python基础——函数的理解、函数对象、函数嵌套、闭包函数、及其应用
文章目录 函数也是变量 可以赋值 可以当做函数当做参数传给另外一个函数 可以当做函数当做另外一个函数的返回值 可以当做容器类型的一个元素 函数对象应用示范 原始版 修正版 函数嵌套 函数的嵌套调用 函 ...
- Java流程控制10道题_上机
Java流程控制10道题 计算出1-100之间所有不能被3整除的整数的和大于(或等于)2000的数字. package day01; public class Lab01 { public stati ...
- 打造炫酷效果:用Java优雅地制作Excel迷你图
摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 迷你图是一种简洁而有效的数据可视化方式,常用于展示趋势和变化.它 ...
- 使用Spring Integration接收TCP与UDP请求
1. 简介 Spring Integration 是一个开源的项目,它是 Spring 生态系统的一部分,旨在简化企业集成(Enterprise Integration)的开发.它提供了一种构建消息驱 ...
- ubuntu 20.1 (linux) 下软件安装教程(基本上都是使用命令行安装)
一.node 1. 安装教程 # 第二步,添加源后安装 需要什么版本直接替换后面的数字即可,如果需要21,直接将20替换为21就可以了 curl -sL https://deb.nodesource. ...
- 一文讲透DevOps理论体系的演进
一.前言 当前,我国处于以信息化.数字化.网络化.智能化为特征的科技变革浪潮中,企业数字化转型大势所趋,那么作为支撑企业IT运转的运营体系也在向多元方向发展,比如DevOps(研发运营一体化).AIO ...
- Odoo—货运管理—odoo时差问题
第一次踩odoo时差的坑,才知道原来odoo在存储日期数据时,是以UTC0时区存放的,和北京时间相差8个小时.只是odoo本身能很好的处理日期数据的存储和展示,所以刚开始接触odoo,不容易发现这个问 ...
- "拍牌神器"是怎样炼成的(二)--- 键鼠模拟之AutoIt
不同于上一篇的WinAPI方法,这次让我们来看另一个更简单.有效的键鼠模拟方案,即通过COM组件AutoItX实现键鼠模拟. AutoIt AutoIt是一个免费软件,它使用一种类似BASIC的脚本语 ...
- ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级
ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级 1.ChatGLM3简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型.Chat ...