本节开始大多都是概念知识,如果要api的demo请自行上github上获取。
所谓的SWT四个模块,其实只是我为了分析和讲解swt而自己分的概念,在SWT的文档中,没有这样的说法,其主要目的是为了方便概念的引申,去更加细腻的去区分SWT的大模块。
1.widget控件
Widget类:是所有控件的基类,该类实现了很多基础功能,比如在上一节讲的checkWidget就是在这里实现的,还有很多常用功能,比如setData,addListener,removeListener,更重要的是,这个类有很多本地方法,用来进行和os的交互,比如控件的生成和事件的传递。源码其实并不是很深,但里面有很多本地方法,需要查看swt的dll文件,而且对工作的帮助并不是很大,所以点到为止
composite容器类型:关于容器的概念,在上一节已经讲解过了,这里主要讲解下常用实现类的功能
CCombo,Combo:下拉菜单(可实现的界面效果一样,但CCombo的功能稍微多一点点)
CoolBar:可移动的工具栏
ToolBar:工具栏
CTabFolder,TabFolder:标签选择器(可实现的界面效果一样,但CTabFolder的功能稍微多一点点)
ScrolledComposite:有滚动条的面板
Table:表格
Tree:树形列表
ExpandBar:可展开,收缩的菜单栏
Browser:浏览器控件,可以用browser做成桌面软件内嵌H5的方式。
SashForm:可设置比例,且在容器范围内可自由调大子控件大小的容器类
Group:左上角有个文本的容器类
Item类型:条目,是用于组成一些现成容器的元素,如tabItem就是用来组成tabFolder,tableItem就是为了组成table,ToolItem组成toolBar,item的父容器都是固定的,而且从名字看就有迹可循
基础控件类:就是功能十分简单的控件
Button:按钮
Label:静态文本框
Link:超链接文本框
Text:文本框
List:列表菜单
ProgressBar:进度条
控件中一些常用的api,以shell为例子:
shell.setSize(300, 400); //设置窗体尺寸 shell.setText("hello 讯讯"); //设置窗体标题 shell.setBackground(new Color(null, 0, 0, 0)); //设置背景颜色,为黑色 shell.setData("key", "value"); //设置一个缓存数据,内置一个hashMap shell.setToolTipText("this is tip"); //设置悬浮提示 shell.setEnabled(true); //设置是否可点击 shell.setVisible(true); //设置可显示 shell.setLayoutData(new GridData()); //作为子控件时,设置布局数据 shell.setLayout(new FillLayout()); //设置充满式布 shell.setFont(new Font(null, "微软雅黑", 12,SWT.BOLD)); //设置文字风格 shell.setMenu(new Menu(shell)); //设置菜单
2.Layout布局
这个概念对不熟悉界面编程的人是比较陌生的概念,简单的说,不同的layout对应着不同的布局算法,举个例子,GridLayout gl = new GridLayout(3, true);表示新建一个网格布局,使用了此布局的面板控件,将水平分成均等的3份,且自己大小的size的变化,也会影响到内部子控件的大小。特别需要掌握好GridLayout和GridData两个类,API说明请查看github
Layout中的注意事项:
A.如果没有特殊的设置,一般情况下,子控件的大小是会因为父控件的大小产生变化。但到了不能再小的时候,子控件将不会进行缩放,以保证区域显示元素的完整,当然很多时候,控件也是需要设置特定的size
B.子控件的坐标是相对于父控件而言的,而并不是相对于整个屏幕的,如果需要转换,需要调用.toDisplay(0, 0)的API进行转换。
C.如果,中途改变了layout,又或者修改了子控件的大小,或者数量,一定要调用composite中的layout()
3.Listener事件
事件机制其实和一般的语言的事件都是一样的,监听之后进行反应的处理。swt事件的实现是由widget进行对os的调用,但是在control层,也实现了很多通用的事件类型。比如说,鼠标事件,键盘事件。所以,并不是说,你通过addXXXlistener找不到就代表没这个事件,addXXXListener只是一些通用的才有这种写法。此时可以通过addListener的api尝试。
4.系统Display
Display的常用API: Display.getDefault().asyncExec(runnable);//ui异步线程更新,不会阻塞,常用 Display.getDefault().syncExec(runnable);//ui线程同步执行,会阻塞现行的ui线程 Display.getDefault().getBounds();//获取显示器区域, Display.getDefault().getActiveShell();//获取当前活动的shell Display.getDefault().getShells();//获取shell数组 Display.getDefault().getFocusControl();//获取焦点控件 Display.getDefault().getCursorControl();//获取光标控件
其实关于display的概念,在上一节已经讲得差不多了,就是一个运行环境+系统桥梁+ui线程。
下一节,主要讲Jface的概念。
SWT部分在这里已经讲完,基本是理清概念,还是那句,如果需要详细的api的讲解,可以查看电子书,因为在以前的入门经验中,我仔细敲了很多代码,但并不知道我敲的是什么,而且很多的类和api,在实际工作中,从来没用到过。而在我司培训到工作的流程中,并不可能有这样的时间给你慢慢适应,先有一个总体的概念是十分重要的,这是快速入手的基础,而不是一上来就告诉你代码该怎么写,一锅炖。然后在实际的工作中,积累和运用。多写,但在写的基础上,一定要把只是归类到自己的知识体系中。这些PPT都是我自己的工作经验和知识运用做出来的,虽然并不是十分的严谨,但我觉得能让人了解事实的本质即可,不想抠太多的细节。
===========================================================
我会在github上将控件的demo代码逐一补充,有需要的同学请标个星,将不断更新DEMO。技术讨论:5222041
https://github.com/JavaRui/com.eshinetech.rcp.training.git
demo将持续更新。需要群讨论,可以到第一节查看前言。
如果想查看各种控件的使用,可以下载电子书《Eclipse_Swt_Jface_核心应用》说是核心,其实都是些基础的入门代码。
如果对知识点有不同意见,请留言
文章列表
http://1299020954.iteye.com/
===========================================================