当前位置: 首页 > news >正文

SWT技巧

实现控件的刷新

问题可以简化如下,点击上方按钮,使下方按钮移动,但要求在监听事件里新建按钮对象,而不是使用原来的按钮(原来的按钮被移除了)。

解决代码如下:

public class TestUI {protected Shell shell;Composite composite=null;	int i=0;public static void main(String[] args) {try {TestUI window = new TestUI();window.open();} catch (Exception e) {e.printStackTrace();}}public void open() {Display display = Display.getDefault();createContents();shell.open();shell.layout();while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}}protected void createContents() {shell = new Shell();shell.setMinimumSize(new Point(100, 20));shell.setMaximumSize(new Point(500, 400));shell.setSize(486,143);shell.setText("SWT Application");shell.setLayout(null);update();Button button = new Button(shell, SWT.NONE);button.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {update();i++;}});		button.setBounds(10, 10, 80, 27);button.setText("\u79FB\u52A8");}void update() {if(composite!=null)composite.dispose();composite = new Composite(shell, SWT.BORDER);composite.setBounds(10, 43, 450, 52);Button btnNewButton = new Button(composite, SWT.NONE);System.out.print(i);btnNewButton.setBounds(30*i, 10, 29, 27);}
}

扩展栏扩展项切换打开关闭

要实现打开一个扩展项时,关闭其他扩展项,需要给扩展栏添加扩展监听器。

关键代码如下:

expandBar.addExpandListener(new ExpandListener() {		@Overridepublic void itemExpanded(ExpandEvent arg0) {// TODO Auto-generated method stubSystem.out.println("expanded");for(ExpandItem item:expandBar.getItems()) {item.setExpanded(false);//这里循环设置其他扩展项关闭}}			@Overridepublic void itemCollapsed(ExpandEvent arg0) {// TODO Auto-generated method stub 这个不用管}});

日期时间设置

DateTime对象的getMonth()方法返回的月份从0(一月)到11(12月)。

设置日期时用setDate(int year,int month,int day)方法比较方便,合法的日期设置不会出现预料之外的结果,month的取值范围在0-11之间。

而如果年月日分别用setYear(),setMonth(),setDay()方法,年份无所谓,但月和日的结果可能受二者的先后次序影响。看如下示例:

DateTime dateTime1 = new DateTime(shell, SWT.BORDER); dateTime1.setBounds(359, 10, 101, 24);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//今天是2023-11-26,getMonth()获得的月份从0开始,上面输出2023-10-26,控件显示2020/11/26dateTime1.setYear(2022); dateTime1.setMonth(11); dateTime1.setDay(31);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//所以上面输出2022-11-31,控件显示2022/12/31dateTime1.setYear(2022); dateTime1.setMonth(10); dateTime1.setDay(30);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//先设置11月,上一次的31号保持不变。因为11月没有31号,所以月份设置失败,保持12月不变,再设置日期30号,12月有30号,上面输出2022-11-30,控件显示2020/12/30dateTime1.setYear(2021); dateTime1.setMonth(8); dateTime1.setDay(31);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//实际上设置9月31号,Day非法,不改变,只改变年和月.上行输出2021-8-30,控件显示2020/9/30dateTime1.setYear(2020); dateTime1.setMonth(1);	dateTime1.setDay(28);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//这里本想设置2月28号,先设置2月,但由于之前是30号,2月没有30号,所以month不变,day变,输出2020-8-28,控件显示2020/9/28
//但如果先设置Day为28号,再设置setMonth(1),则可以成功,下面输出2020-1-28,控件显示2020-2-28
//dateTime1.setYear(2020); dateTime1.setDay(28); dateTime1.setMonth(1);	
//System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());dateTime1.setYear(2019); dateTime1.setMonth(0); dateTime1.setDay(31);
System.out.println(dateTime1.getYear()+"-"+dateTime1.getMonth()+"-"+dateTime1.getDay());
//这里设置1月31号,输出2019-0-31,控件显示2019/1/31DateTime dateTime2 = new DateTime(shell, SWT.BORDER);
dateTime2.setBounds(359, 40, 98, 24);
dateTime2.setDate(2022, 11, 30);
System.out.println(dateTime2.getYear()+"-"+dateTime2.getMonth()+"-"+dateTime2.getDay());
//上面输出2022-11-30,控件显示2022/12/30dateTime2.setDate(2022, 1, 28);
System.out.println(dateTime2.getYear()+"-"+dateTime2.getMonth()+"-"+dateTime2.getDay());
//上面输出2022-1-28,控件显示2022/2/28,直接用setDate方法则无顺序之分

可以看出,当对月和日分别设置时,就像在拨动一个拨轮日历,同一时间只能调整月份或日期,且一个不能带动另一个。如果从12月31号调整到11月30号,如果先调整月份,日期保持31号,由于11月没有31号,则月份调整失败,保持12月不变,再将日期调整为30号,且月份不再调整。结果为12月30号而非11月30号。要想正确调整,需先将日期从31号调整为30号,再将月份从12月调整为11月。

而采用setDate()方法则一次性调整完成。

Composition类的扩展

Composition对象作为容器用于容纳其他控件,可以将其扩展以做一些初始化操作:

public class OperationComposite extends Composite {Statement statement;String userState;public OperationComposite(Composite parent, int style) {super(parent, style);	}public OperationComposite(Shell shell, Composite parent, int style,String newAccount,String newRole,String tableName,String[] btnStrArray,String[] tableHeadersStrArray,ResultSet resultSet,Statement newStatement) {super(parent, style);statement=newStatement;Composite menuComposite=new Composite(parent, SWT.None);		menuComposite.setBounds(10, 10, 722, 35);Group group=new Group(parent, SWT.CENTER);//group.setText(tableName);group.setBounds(10, 51, 722, 243);}@Overrideprotected void checkSubclass() {// Disable the check that prevents subclassing of SWT components}
}

Table类的扩展

Table对象用于将数据以表格形式展示,可以将其扩展以完成一些初始化操作:

public class ExtendedTable extends Table{String[] headerStrArray;String[] contextStrArray= {};String contextStr;static Shell shell;protected void checkSubclass() {        // TODO Auto-generated method stub        }public ExtendedTable(Composite composite,int i) {super(composite, i);// TODO Auto-generated constructor stub}public ExtendedTable(Shell shell,Group group, int style,String newAccount,String newRole,String tableName,String[] headerStrArray,Statement statement,ResultSet resultSet) {// TODO Auto-generated constructor stubsuper(group, style);//super(shell, style);		//Table table=new Table(group, 0);setHeaderVisible(true); setLinesVisible(true);}
}

相关文章:

SWT技巧

实现控件的刷新 问题可以简化如下,点击上方按钮,使下方按钮移动,但要求在监听事件里新建按钮对象,而不是使用原来的按钮(原来的按钮被移除了)。 解决代码如下: public class TestUI {protecte…...

3.数据结构

3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 3.1.1逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照…...

一篇文章完成Hbase入门

文章目录 一、简介1、数据模型结构2、物理存储结构3、数据模型4、基本架构 二、安装1、下载解压安装包2、修改配置文件3、启动服务(单机、集群)4、配置高可用(HA) 三、命令行操作1、建表2、新增/更新数据3、查看表数据4、删除数据5、修改默认保存的数据版本 四、架构1、RegionS…...

​使用PotPlayer播放器查看软解和硬解4K高清视频时的CPU及GPU占用情况​

目录 1、问题说明 2、PotPlayer播放器介绍 3、视频的软解与硬解 4、使用PotPlayer查看4K高清视频软解和硬解时的CPU占用情况 4.1、使用软解时CPU和GPU占用情况 4.2、使用硬解时CPU和GPU占用情况 5、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅…...

怎么做excel表格的二维码?文件快速做二维码的教程

Excel表格怎么做成二维码来扫码插看呢?Excel是工作中常用的一种文件格式,想要将表格内容分享给其他人查看,那么将表格生成二维码的方法会更加的方便快捷,其他人只需要扫描二维码就可以查看或者下载文件。表格excel二维码可以通过文…...

Clion取消double shift(按两下shift键)全局搜索

Clion 取消 double shift(按两下 shift 键)全局搜索。 如下图所示打开 setting。 点击 advanced setting,搜索 disable,取消勾选左侧复选框,点击 ok。...

Spring RabbitMQ那些事(2-两种方式实现延时消息订阅)

目录 一、序言二、死信交换机和消息TTL实现延迟消息1、死信队列介绍2、代码示例(1) 死信交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 三、延迟消息交换机实现延迟消息1、安装延时消息插件2、代码示例(1) 延时消息交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 …...

免费SSL证书有效期只有90天?太短?

随着网络安全问题日益受到重视,SSL证书成为了网站安全的必需品。然而,在许多情况下,免费提供的SSL证书往往只有90天的有效期,这种期限对于很多用户来说显得过于短暂。 首先,我们要理解为什么 SSL 证书的有效期设定为90…...

Java小游戏 王者荣耀

GameFrame类 所需图片: package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayLis…...

Python:diskcache实现基于文件的数据缓存

diskcache是一个基于Sqlite文件的数据缓存 文档 https://grantjenks.com/docs/diskcache/https://github.com/grantjenks/python-diskcachehttps://pypi.org/project/diskcache/ 示例 from diskcache import Cache# 指定文件夹 cache Cache(./cache)# 存 cache.set(name, …...

微信小程序 - 一篇带你解读小程序强制更新(冷/热启动)

在小程序开发中,我们会不可避免的涉及到小程序新版本迭代的问题,因为小程序的更新机制是异步的,新版本发布后并不会立刻应用到所有的现有用户,部分用户用的可能还是原来的旧版本,但如果是急需修复的 bug 或其他急需上线…...

关于接口测试自动化的总结与思考!

序 近期看到阿里云性能测试 PTS 接口测试开启免费公测,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于: 服务端接口测试介…...

如何用低代码的思路设计文字描边渐变组件

前言 文字特效设计一直是困扰 Web 前端 Css 世界多年的问题, 比如如何用纯 Css 实现文字描边, 渐变, 阴影等, 由于受限于浏览器兼容性的问题, 我们不得不使用其他替代方案来实现. 平时工作中我们使用 PS 等设计工具能很容易的实现文字渐变等特效, 但是随着可视化技术的成熟, 我…...

Linux 网络通信

(一)套接字Socket概念 Socket 中文意思是“插座”,在 Linux 环境下,用于表示进程 x 间网络通信的特殊文件 类型。本质为内核借助缓冲区形成的伪文件。 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。Linux 系统…...

借力互联网,民营医院探索互联网医疗服务的发展方向

民营医院互联网医疗服务是指利用互联网技术和平台,为患者提供更加便捷、高效的医疗服务。在当前数字化时代,互联网医疗服务正逐渐成为医疗行业的新趋势,也为民营医院开拓了更广阔的发展空间。下面将围绕这一主题进行讨论: 首先&a…...

office tool plus工具破解word、visio等软件步骤

第一步:下载工具 破解需要用到office tool plus软件 office tool plus软件下载地址:Office Tool Plus 官方网站 - 一键部署 Office 选择其中一个下载到本地(本人选择的是第一个的云图小镇下载方式) 第二步:启动工具 …...

python之pyqt专栏5-信号与槽1

在上一篇文章,我们了解到如果想要用代码改变QLabel的文本内容,可以调用QLabel类的text()函数。 但是现在有个这样的需求,界面中有一个Button与一个Label,当点击Button时,将Label的内容改变为“Hello world!…...

【JMeter】不同场景下的接口请求

场景1: 上传文件接口即Content-Type=multipart/form-data 步骤: 1. 接口url,method以及path正常填写 2.文件上传content-type是multipart/form-data,所以可以勾选【use multipart/form-data】,如果还有其他请求头信息可以添加一个请求头元件 3.请求参…...

十八数字文化受邀参加版博会“区块链+版权”创新应用试点研讨会

2023年11月23日至25日,以“版权新时代 赋能新发展”为主题的第九届中国国际版权博览会在成都市中国西部国际博览城和天府国际会议中心举办。版博会是我国版权领域唯一的综合性、国际性、国家级版权专业博览会,本届版博会由国家版权局主办,四川…...

Centos 7 离线安装(tar) NodeJS 16 和 Vue

目录 一、下载Nodejs二、安装Nodejs2.1、创建安装目录2.2、上传安装包(无网络) or 直接下载(有网络)2.3、解压缩2.4、配置环境变量2.5、创建软连接2.6、更换镜像源2.7、验证是否安装成功 三、安装Vue四、卸载Nodejs 一、下载Nodejs Nodejs:https://nodejs.org/en/ …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...