jface

news2024/11/18 11:41:20

JFace 是建立在 SWT 之上的 UI 部件,它是 SWT 的扩展并能和SWT交互。

ApplicationWindow和Action

org.eclipse.jface.window.ApplicationWindow;

JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认方法,分别用于创建内容、菜单、工具栏、状态栏以及初始化和销毁。这样使整个程序的结构易于控制,而不是像单独用SWT开发时一切需要程序员自己实现。

ApplicationWindow创建窗体

窗体的布局 默认为网格式布局(GridLayout)
public class JFaceWindowsClass extends ApplicationWindow {
    JFaceWindowsClass() {
        //父类接受一个参数为Shell类的对象作为父窗口句柄,
        //如果这个窗口为顶级窗口的话,则传null
        super(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类的对象作为父窗口句柄,
        // 如果这个窗口为顶级窗口的话,则传null
        super(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

    //创建工具条
    @Override
    protected ToolBarManager createToolBarManager(int style) {
        ToolBarManager toolbar = new ToolBarManager();
        return toolbar;
    }

MenuManger
    //创建菜单
    @Override
    protected 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 {

	@Override
	public void run() {
		System.out.println("点击了 新建");
	}

	//新建文件
	public NewAction() {
		//设置该action的对应按钮上的文本和按钮风格
		super("新建",AS_PUSH_BUTTON);
		//设置提示标签
		setToolTipText("新建文件");
	}
}

调用了父类的构造函数,其中第一个参数是Action对应的文本,而第二个参数则是一个风格参数。

效果就是Action被附加在了一个按钮上面,而按钮上显示的文本就是新建


Action关联菜单和工具栏

修改上述JFaceWindowsClass类中的重载方法

	//创建工具条
	@Override
	protected ToolBarManager createToolBarManager(int style) {
		ToolBarManager toolbar = new ToolBarManager();
		toolbar.add(new NewAction());
		return toolbar;
	}

	//创建菜单
	@Override
	protected 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

Action 类似 SWT 的事件,但 Contribution 的功能更复杂,它包括两个主要的 Contribution 类: ContributionItem 类、 ContributionManager 类。
 Contribution直译:贡献、捐赠
其中 ContributionItem 类提供个别的 GUI 组件的触发行为。 ActionContributionItem 类是
ContributionItem 的子类,该类执行应用程序关联的 GUI 行为 (Action)。它并不设置组件在窗体的显现,而是通过 fill()方法实现

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, "对话框","错误信息");


重要

自定义对话框

自定义对话框是通过自定义一个类通过继承 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方法将数据输入到表格。


TreeViewer

TreeViewer

构造器
TreeViewer(Composite parent) 
TreeViewer(Composite parent, int style) 
TreeViewer(Tree tree)

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)设置给定项的展开状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5年测试12月被裁,准备3个月终上岸阿里25K,面试时差点被问哭···

我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事软件测试已经5年了,也点点点了五年,每天都是重复的工作&…

不用再找了,你要的国内好用的ChatGPT网站都在这里

💡 大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加:keeepdance,备注:chatgpt,拉你进群。 目录 ChatGPT是什么 OpenAI与ChatGPT的发展历程 AI对话聊天 AI文档…

GWAS分析中的GO和KEGG富集分析

上一次,我们介绍如何根据显著性snp,使用bedtools根据上下游距离,根据gff文件注释基因。 这一次,介绍一下如何根据注释的基因,进行富集分析,主要是看一下GWAS定位的基因有没有某一个趋势,也算是…

Python泰裤辣丨520写一个自动换壁纸软件,将女友照骗放进去送给她

Python泰裤辣!520写一个自动换壁纸软件,将女友照骗放进去送给她! 准备工作1、环境2、使用的模块3、如何配置pycharm里面的python解释器?4、pycharm如何安装插件? 代码实战1、获取壁纸 自动更换壁纸程序最后 话说兄弟们,今天520你们都送给女朋友啥礼物了…

文件上传之,waf绕过(24)

上传参数名解析:明确哪些东西可以修改 content-disposition:一般可更改 表单的数据 name:表单参数值,不能更改 表单提交的值 filename:文件名,可以修改 上传的文件名 content-type:文件mime,…

算法学习(数组和字符串) 之数组简介

集合、列表和数组 1.集合: 集合一般被定义为由一个或多个确定的元素所构成的整体。通俗来讲,集合就是将一组事物组合在一起。你可以将商店里的所有物品当成一个集合。 特点: 集合里的元素没有顺序集合里的元素类型不一定相同 2.列表&…

【Python入门篇】——Python中循环语句(for循环的基础语法)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Foley Sound——DECASE项目——项目复现

文章目录 概述项目复现配置环境下载并配置文件运行代码第一阶段,训练提取DTFR特征的模型资料搜集 train_vqvae.py 第二阶段,使用训练好的模型提取声音的DTFR特征torch.cuda.OutOfMemoryError: CUDA out of memory. 第三阶段,基于特征训练合成…

学习Netty BootStrap的核心知识,成为网络编程高手!

0 定义 深入 ChannelPipeline、ChannelHandler 和 EventLoop 后,如何将这些部分组织起来,成为可运行的应用程序? 引导(Bootstrapping)!引导一个应用程序是指对它进行配置,并使它运行起来的过程…

AcWing算法提高课-1.3.8多重背包问题 III

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 有 N N N 种物品和一个容量是 V V V 的背包。 第 i i i 种物品最多有 s i s_i si​ 件&#xff0c;每件体积是 v i v_i vi​…

我们到底该怎么入门网络安全?一般人还真不行

我之前写了不少网络安全技术相关的故事文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人在微信里问我&#xff1a;&#xff08;文末入门福利&#xff09; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; …

linux系统打包压缩与搜索命令

1、tar命令 在linux系统中&#xff0c;常见的文件格式比较多&#xff0c;其中主要使用使用的tar和zip来压缩文件&#xff0c;tar命令的参数比较多&#xff0c;这里呢我一般只会记得几个比较常用的。 -c创建压缩文件-x解开压缩文件-z用Gzip压缩或解压-v显示压缩或者解压的过程-…

C语言—自定义类型(结构体、枚举、联合)

自定义类型 结构体结构体的声明特殊的声明结构的自引用结构体变量的定义和初始化结构体内存对齐修改默认对齐数offsetof宏 结构体传参 位段位段的定义&#xff08;声明&#xff09;位段的内存分配位段的跨平台问题位段的应用 枚举枚举类型的定义及使用枚举的优点 联合&#xff…

第02章 变量与运算符

一 关键字&#xff08;keyword&#xff09; 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串&#xff08;或单词&#xff09; HelloWorld案例中&#xff0c;出现的关键字有 class、public 、 static 、 void 等&#xff0c;这些单词已经被Java定义…

Linux设备驱动模型(二)

基于linux-3.14.16 设备模型&#xff08;LDM&#xff09;包括&#xff0c;总线、驱动、设备 一、总线及其api 1、注册一个总线 以i2c总线为例&#xff0c;下面基本表现出了注册一个总线的过程。 1、定义一个总线bus_type&#xff0c;填充几个回调 2、调用bus_register注册总线…

【STM32系列】硬件介绍及固件安装

【STM32系列】硬件介绍及固件安装 硬件介绍应用领域 固件安装进入DFU模式安装固件退出DFU&#xff0c;进入U盘模式 演讲稿 欢迎收看由咸鱼菌工作室出品的STM32系列教程。本篇内容主要是设备介绍及环境安装 硬件介绍 本系列所选硬件ZTMR(STM32)开发板 &#xff0c;选用STM32芯片…

新手如何学习挖SRC漏洞?【网络安全】

前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&#xff0c;提高了安全防护水平。 也有很多小…

【ProtoBuf】1.初识ProtoBuf

————————————每一个不曾起舞的日子都是对生命的辜负。 初识ProtoBuf 一. 序列化概念二. ProtoBuf1. 什么是ProtoBuf2. ProtoBuf的特点3. ProtoBuf进行序列化反序列化的流程 三. 本章总结 一. 序列化概念 日常生活中&#xff0c;手机上收到的语音消息在网络中不能直…

多线技术:TDI时间延迟积分

多线技术&#xff1a;TDI时间延迟积分 在比较暗的环境下拍照&#xff0c;清晰成像的条件&#xff0c;是CMOS芯片获取足够的光。而获得足够光的方法有&#xff1a; 方案1.增加单位时间的光照强度&#xff08;光源、大镜头收集光&#xff09; 方案2.增加CMOS感光时长&#xf…

国潮还能怎么玩?小红书用户画像速看!

所谓“国潮”&#xff0c;概括来说就是“国风潮流”。主要有两层含义&#xff1a;其一&#xff0c;有中国文化和传统的基因&#xff1b;其二&#xff0c;能将传统文化与时下潮流相融合&#xff0c;使产品更具时尚感。在“国潮”元年之前&#xff0c;“国潮”大多指狭义上的特定…