jface
JFace 是建立在 SWT 之上的 UI 部件,它是 SWT 的扩展并能和SWT交互。
ApplicationWindow和Action
org.eclipse.jface.window.ApplicationWindow;
JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认方法,分别用于创建内容、菜单、工具栏、状态栏以及初始化和销毁。这样使整个程序的结构易于控制,而不是像单独用SWT开发时一切需要程序员自己实现。
ApplicationWindow创建窗体
窗体的布局 默认为网格式布局(GridLayout)
public class JFaceWindowsClass extends ApplicationWindow {JFaceWindowsClass() {//父类接受一个参数为Shell类的对象作为父窗口句柄,//如果这个窗口为顶级窗口的话,则传nullsuper(null);}public void run() {//直到窗口关闭方能从 open()方法返回setBlockOnOpen(true);//打开窗口open();//关闭窗口时释放在操作系统中用到的资源Display.getCurrent().dispose();}//创建并放置窗口小部件public Control createContents(Composite parent) {// 设置窗体大小parent.getShell().setSize(500, 375);// 设置窗体标题parent.getShell().setText("JFace ApplicationWidows 实例");return parent;}public static void main(String[] args) {new JFaceWindowsClass().run();}
}
在 JFace 窗口添加 SWT 基本组件:createContents()
ApplicationWindow 将在所有其他窗口控件创建之后,窗口在屏幕上显示之前调用createContents方法。
ToolBarManager和MenuManger
JFaceWindowsClass() {// 父类接受一个参数为Shell类的对象作为父窗口句柄,// 如果这个窗口为顶级窗口的话,则传nullsuper(null);//在构造函数中调用addMenuBar和addToolBar让工具条和菜单显示出来addMenuBar();addToolBar(SWT.FLAT | SWT.WRAP);}
ToolBarManager 是对SWT的ToolBar控件的封装。
//构造方法 public ToolBarManager() public ToolBarManager(int style) public ToolBarManager(ToolBar toolbar)
一般我们都是向ToolBarManager里面添加Action,显示的效果就是一个Button
//创建工具条@Overrideprotected ToolBarManager createToolBarManager(int style) {ToolBarManager toolbar = new ToolBarManager();return toolbar;}
MenuManger//创建菜单@Overrideprotected MenuManager createMenuManager() {MenuManager menubar = new MenuManager();MenuManager fileMenu = new MenuManager(" &File ");menubar.add(fileMenu);return menubar;}
1
现在这样还是没有效果的,要想有效果。还要加Action
自定义Action动作
action 通常被称为动作命令, 可以关联到菜单,工具条,以及按钮。action 允许共享多个控件触发代码从而消除冗余代码。
Action构造器
protected Action()
protected Action(String text)
protected Action(String text,ImageDescriptor image)
protected Action(String text,int style)
Action是jface中的一个概念,在jface中通过org.eclipse.jface.action中的Action和ActionContributionItem类实现了视图和处理代码的分离,这样无论何时用户触发了一个控件的事件,都会激活一个相应的Action类实例来进行时间处理。
Action的功能
Action里面最重要的方法是run(),它也是事件触发以后执行的代码。
public class NewAction extends Action {@Overridepublic void run() {System.out.println("点击了 新建");}//新建文件public NewAction() {//设置该action的对应按钮上的文本和按钮风格super("新建",AS_PUSH_BUTTON);//设置提示标签setToolTipText("新建文件");}
}
调用了父类的构造函数,其中第一个参数是Action对应的文本,而第二个参数则是一个风格参数。
效果就是Action被附加在了一个按钮上面,而按钮上显示的文本就是新建
Action关联菜单和工具栏
修改上述JFaceWindowsClass类中的重载方法
//创建工具条@Overrideprotected ToolBarManager createToolBarManager(int style) {ToolBarManager toolbar = new ToolBarManager();toolbar.add(new NewAction());return toolbar;}//创建菜单@Overrideprotected MenuManager createMenuManager() {MenuManager menubar = new MenuManager();MenuManager fileMenu = new MenuManager(" &File ");fileMenu.add(new NewAction());menubar.add(fileMenu);return menubar;}
运行后,长这样。
菜单和工具栏共用一个 Action ,无论是从菜单还是从工具栏执行都能实现文件新建你可以直接点击工具栏的新建,如下:
也可以在菜单栏中 File-新建
不管点击哪个,都能触发我们刚自定义的NewAction类中的run方法
ActionContributionItem
Contribution直译:贡献、捐赠
MessageDialog
MessageDialog的用法
MessageDialog的用法很简单,只需要一句话.
MessageDialog.openInfomation(shell,title,message);
MessageDialog.openConfirm(shell,title,message);
MessageDialog.openQuestion(shell,title,message);
MessageDialog.openError(shell,title,message);
这四个的不同之处有三点:
提示的图标、 显示的按钮、 返回值
openInfomation 类似i的图标 一个确定 void
openConfirm 问号图标 确定和取消 boolean
openQuestion 问号图标 是和否 boolean
openError 一个X的图标 确定 void
确认信息对话框
信息提示对话框用来向用户显示提示性的信息,用户通过对话框上的按钮来对信息进行确认。
构造
public static boolean openConfirm(Shell parent, String title, String message)
//使用举例
MessageDialog.openConfirm(shell, "对话框","请确认信息");
提示信息对话框
构造
public static void openInformation(Shell parent, String title, String message)
//使用举例
MessageDialog.openInformation(shell, "对话框","提示信息");
错误信息提示对话框
构造
public static void openError(Shell parent, String title, String message)
//使用举例
MessageDialog.openError(shell, "对话框","错误信息");
输入值对话框
// 定义一个输入对话框InputDialog dlg = new InputDialog(shell, "InputDialog标题", "请输入XXX", "初始化值", null); if (dlg.open() == InputDialog.OK) { //打印输入的值System.out.println(dlg.getValue());}
重要
自定义对话框
自定义对话框是通过自定义一个类通过继承 Dialog 类来定制的。
public class CustomDialog extends Dialog { ......
}
向导对话框
Wizard类
其他对话框
颜色选择对话框
字体选择对话框
文件选择对话框
TableViewer
TableViewer
TableViewer和Table关系
TableViewer把Table组件作为一个实例变量,从而实现了对Table功能的扩展
public class TableViewer extends AbstractTableViewer {private Table table; }
TableViewer构造 public TableViewer(Composite parent) public TableViewer(Composite parent,int style) public TableViewer(Table table)
使用TableViewer的好处在哪
将组件的数据和组件显示分离开来,例如,
将表格和表格中的数据分离开来,使用SWT的Table、TableColumn和TableItem空间展现表格,
而使用TabelViewer等查看器管理表格的数据。这种设计很大程度上简化了表格、树等复杂的UI编程
TableViewer使用
在得到由List装载的包含数据信息的实体类对象后,
接下来就是使用TableViewer来显示这些数据,实现过程一般要经过如下步骤:
第一步:创建一个TableViewer对象,并在构造函数中用式样设置好表格的外观,这与其他SWT组件的用法一样。
第二步:通过表格内含的Table对象设置布局方式,一般都使用TableViewer的专用布局管理器TableLayout。该布局方式将用来管理表格内的其他组件(如TableColumn表格列)。
第三步:用TableColumn类创建表格列。
第四步:设置内容器和标签器。内容器和标签器是JFace组件中的重要概念,它们分别是IStructuredContentProvider、ITableLabelProvider两个接口的实现类,它们的作用就是定义好数据应该如何在TableViewer中显示。
第五步:用TableViewer的setInput方法将数据输入到表格。
表格内容提供器ContentProvider
IStructuredContentProvider
表格标签提供器LabelProvider
ITableLabelProvider
TreeViewer
树内容提供器ContentProvider
TreeViewer的内容提供器(ITreeContentProvider)构建树中比较复杂的部分,它为树的显示提供了内容,内容提供器要实现的方法如下。
1. getElements
public Object[] getElements(Object inputElement);
当程序开始构建树时,首先调用getElements返回一个对象的数组,此数组对象表示当前树的根节点,inputElement参数为TreeViewer的输入(setInput的输入数据)。
--------------------------------------
2. hasChildrenpublic boolean hasChildren(Object element);
当TreeViewer显示一个节点后,会调用hasChildren函数判断当前节点是否有子节点,如果有子节点则显示“+”,element参数为要判断是否有子节点的节点。
--------------------------------------
3. getChildrenpublic Object[] getChildren(Object parentElement);
当用户选择节点打开子节点时,会调用getChildren函数返回下一层子节点,parentElement参数为选择的节点。
--------------------------------------4. getParent
public Object getParent(Object element);
可以通过此方法返回element的父节点。
--------------------------------------5. inputChanged
public void inputChanged(Viewer viewer, Object oldInput, Object newInput);
当输入改变时调用此方法。
--------------------------------------
6. disposepublic void dispose();
当树销毁时被调用。
通过getElements方法得到根,再通过hasChildren判断根下是否有子节点,如果有子节点,可以通过getChildren得到所有的子节点
树标签提供器LabelProvider
树查看器使用的标签提供器为 ILabelProvider
ILabelProvider主要实现getImage和getText函数。当TreeViewer得到一个节点后会通过getText得到此节点的显示文本,通过getImage方法得到节点的显示图标
TreeViewer使用举例
构造器
TreeViewer(Composite parent)
TreeViewer(Composite parent, int style)
TreeViewer(Tree tree)
TreeViewer 通过 setContentProvider 方法设置内容提供器,这个方法继承自 AbstractTreeViewer ,通过 setLabelProvider 方法设置标签提供器,这个方法继承自 ColumnViewer 。 TreeViewer 类的使用主要围绕内容和标签提供器两个类来进行。
TreeViewer 常用API
editElement(Object element, int column)开始编辑给定元素。getCellEditors()获得这个树查看器的单元编辑器。getCellModifier()获得这个树查看器的单元修改器。getControl()获得与这个查看器相关的控件。getTree()获得树查看器的树控件。getExpanded(Item item)返回给定的 SWT 项是否展开或收缩。showItem(Item item)显示给定项。isExpandable(Object element)返回代表给定元素的树的节点是展开还是收缩。setSelection(List items)设置选择给定的列表项。setCellEditors(CellEditor[] editors)为树查看器设置单元格编辑器。removeAll(Control widget)从给定的控件中移除所有项。setCellModifier(ICellModifier modifier)为树查看器设置单元格修改器。setLabelProvider(IBaseLabelProvider labelProvider)设置标签提供器。setExpanded(Item node, boolean expand)设置给定项的展开状态。
相关文章:

jface
JFace 是建立在 SWT 之上的 UI 部件,它是 SWT 的扩展并能和SWT交互。 ApplicationWindow和Action org.eclipse.jface.window.ApplicationWindow; JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认…...

六级备考28天|CET-6|听力第一讲|基本做题步骤与方法|13:30~14:30
目录 1. 重点词汇 proofread / ˈpruːfriːd / v.校对,校阅 autonomous adj.独立的 obsession n. 喜好 ample …...

系统设计 - 设计一个速率限制器
实施速率限制器的位置主要取决于我们的应用程序、技术栈、技术团队等因素。通常有三个位置可供选择:客户端、服务器端或中间件。 客户端是不可靠的地方来执行速率限制,因为恶意行为者可以轻易伪造客户端请求。 比将速率限制器放在服务器端更好的方法是使…...

[技术分享]Android平台实时音视频录像模块设计之道
实现背景 录像有什么难的?无非就是数据过来,编码保存mp4而已,这可能是好多开发者在做录像模块的时候的思考输出。是的,确实不难,但是做好,或者和其他模块有非常好的逻辑配合,确实不容易。 好多…...
JDKMissionControl官方用户指南--人工翻译
1. JMC8新增功能 暂时用不到,暂略 2. JDK Mission Control是什么 JMC是一组高级工具,用于管理、监视、分析Java应用程序并排除其故障。JMC能够对代码性能、内存和延迟等领域进行高效而详细的数据分析,而不会引入通常与分析和监控工具相关的…...

MySql-高级(分库分表问题简析) 学习笔记
文章目录 1. 为什么要分库分表?2. 用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?3. 你们具体是如何对数据库如何进行垂直拆分或水平拆分的?4. 分库分表时,数据迁移方案5. 如何设计可以动态扩容缩容…...

【5.20】五、安全测试——安全测试工具
目录 5.4 常见的安全测试工具 1. Web漏洞扫描工具——AppScan 2. 端口扫描工具——Nmap 3. 抓包工具——Fiddler 4. Web渗透测试工具——Metasploit 小提示:Kali Linux 5.4 常见的安全测试工具 安全测试是一个非常复杂的过程,测试所使用到的工具也…...
【13900k】i9 核显升级驱动
这里写自定义目录标题 官方的助手不能用显卡控制中心提示最新的更新搜索显卡 intel uhd graphics 770 手动下载安装自定义音频为啥也要卸载?新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片…...
使用Python将绿色转换为红色、红色转换为蓝色的图像处理
使用Python将绿色转换为红色、红色转换为蓝色的图像处理 在图像处理中,我们经常需要对图像进行颜色转换和修改。本篇博客介绍了如何使用Python的Pillow库来读取一个文件夹中的所有图像,并将其中的绿色转换为红色,红色转换为蓝色。我们还展示…...

Web2与Web3开发的不同之处
Web2是引入交互功能的第二代互联网,也是我们今天所熟悉的。随着Web的不断发展,第三代互联网,也被称为Web3,正处于积极开发中。Web3引入了在区块链上运行的去中心化和无需许可的系统。但是Web2和Web3开发之间有什么区别呢ÿ…...
递增数组的判断【python实现】
有时候需要对某一组数组的数据进行判断是否 递增 的场景,比如我在开发一些体育动作场景下,某些肢体动作是需要持续朝着垂直方向向上变化,那么z轴的值是会累增的。同理,逆向考虑,递减就是它的对立面。 下面是查找总结到…...
在自定义数据上训练 YOLOv8 实例分割
图像分割是一个核心视觉问题,可以为大量用例提供解决方案。从医学成像到分析流量,它具有巨大的潜力。实例分割,即对象检测+分割,甚至更强大,因为它允许我们在单个管道中检测和分割对象。为此,Ultralytics YOLOv8 模型提供了一个简单的管道。在本文中,我们将对自定义数据…...
洛谷密钥被破解:加密安全面临新挑战
密钥管理是加密系统中非常重要的一环,它涉及到密钥的生成、存储、分发、管理和销毁等多个方面。在密码学中,密钥是保护数据隐私和安全性的核心因素之一,因此,确保密钥的安全和保密性显得尤为重要。在2016年举办的 CQOI 数论竞赛中…...

02 Android开机启动之BootLoader及kernel的启动
Android开机启动之BootLoader及kernel的启动 1、booloader的启动流程 第一阶段:硬件初始化,SVC模式,关闭中断,关闭看门狗,初始化栈,进入C代码 第二阶段:cpu/board/中断初始化;初始化内存以及flash,将kernel从flash中拷贝到内存中,执行bootm,启动内核 2、kernel的启…...
代码随想录算法训练营 Day 49 | 121.买卖股票的最佳时机,122.买卖股票的最佳时机 II
121.买卖股票的最佳时机 讲解链接:代码随想录-121.买卖股票的最佳时机 确定 dp 数组以及下标的含义: dp[i][0] 表示第 i 天持有股票所得最多现金dp[i][1] 表示第 i 天不持有股票所得最多现金 确定递推公式: 如果第 i 天持有股票即 dp[i][0]&…...

精炼计算机网络——数据链路层(一)
文章目录 前言3.1 数据链路和帧3.1.1 数据链路和帧3.1.2 三个基本问题 3.2 点对点协议PPP3.2.1 PPP协议的特点3.2.2 PPP协议3.2.3 PPP协议的工作状态 总结 前言 上篇文章,我们一同学完了物理层的全部内容,在本篇文章中,我们初步学习数据链路…...

猿创征文|Spring系列框架之面向切面编程AOP
⭐️前面的话⭐️ 本篇文章将介绍一种特别重要的思想,AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。 …...
IoT架构设计
当前有一个支持5000万用户并发访问的网站,每个用户都有一个IOT设备,用户可以查看设备状态,接受设备通知 1.架构设计 针对不同的业务量模型,可以采用不同的架构设计,如下: 低业务量模型 针对低业务量模型…...

EasyRecovery16电脑硬盘数据恢复软件功能讲解
硬盘是很常见的存储数据的设备,硬盘中很多重要的数据一旦丢失会很麻烦,不过现在有硬盘数据恢复软件可以自行在家恢复数据。今天的文章就带大家来看看硬盘恢复数据的软件EasyRecovery。 EasyRecovery 是一款专业的数据恢复软件,支持恢复不同存…...

信道通信基础 - 传输介质(双绞线、光纤)
文章目录 1 概述2 传输介质2.1 双绞线2.2 光纤 3 扩展3.1 网工软考真题 1 概述 2 传输介质 2.1 双绞线 双绞线:8 根铜导线每 2 根扭在一起(百兆用 4 根,千兆必须用 8 根)分类 2.2 光纤 光纤:利用光在 玻璃或塑料纤…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...