作为我的开博之作,我选择了写这样的一个题目,完全是因为我对Java技术的爱好。在Java这个技术领域,涉及的东西颇多,我也都有一点点的研究,现在主攻方向是J2EE,之所以写这些关于SWT的东东也并不能说明我在这方面就是一个高手,事实上,我也是一个初学者,而我的目的呢,也只是希望通过博客和大家共享交流。
废话说多了 ^_^ 现在进入正题:
什么是SWT?如果有兴趣了解这门技术的朋友,可以参照下面的资料:
http://www.ntsky.com/tech/java/j2se/advancedjava/2008-05-29/4fc1e1a5c979c36a.html?Java%E9%AB%98%E7%BA%A7-java SWT:Swing和AWT的强力竞争者
http://www.eclipseworld.org/bbs/read-cec-tid-172.html SWT/jFace开发入门指南-中国Eclipse社区。
在写下面的内容之前,笔者假定读者朋友是对SWT这项技术有了基本的了解。
1.在shell中禁用最大化按钮
我在尝试写SWT代码的时候遇着这样的一个问题:我希望将shell的最大化按钮禁用,于是我回想原来在写AWT的时候用到的一个方法,Resizable()(貌似是这样,记不清莫怪),于是我在API文档中查找shell的相关方法,希望能够找到这样的一个方法,但是很不幸,我没有找到。后来我慢慢领悟到,其实SWT中大部分组件的表现形式都是通过他们构造方法中的style参数(所有的style都在org.eclipse.swt包中)来控制,于是我查看了API文档,在shell中找到了几个关于shell表现的style:
SWT.CLOSE SWT.TITLE SWT.MIN SWT.MAX SWT.RESIZE
如果我们希望在shell中禁用最大化按钮,只需在源码中写这样的代码:
Display display = new Display();
shell = new Shell(display,SWT.CLOSE|SWT.MIN|SWT.SYSTEM_MODAL); //创建窗体禁用最大化按钮
2.键盘的字母监听
前言:监听回车键之类的东东很好办,因为有现成的keyCode,比如说我们在一个文本框中监听回车键,代码如下:
text1.addKeyListener(new KeyAdapter(){ //添加按键监听器于text1上
public void keyPressed(KeyEvent e) { //监听键盘按键
if(e.keyCode == SWT.CR) //当按回车键键时触发
text2.setText(text1.getText());}});
OK,这样就搞定.。但是如果我们监听字母A键呢,查找API文档,没有SWT.A这样的style,所以看来这样是行不通了。
但是我们可以用下面的方法解决,代码:
text1.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(e.keyCode == (int)(e.character = 'a')) //当按键为字母A键时触发
text2.setText(text1.getText());}});
在上面的代码中我们使用了Event类的character,他返回一个字符型,我们只需要将它强制转化为int类型在和keyCode做比较就ok。个人认为这个方法比较复杂,但是是我目前摸索到的方法,如果其他朋友有更好的方法,希望能够提出来大家共享。
3.在MessageBox中判断点击。
MessageBox是一个消息对话框(详见API文档),他有几种style:
ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING
OK, OK | CANCEL
YES | NO, YES | NO | CANCEL
RETRY | CANCEL
ABORT | RETRY | IGNORE
我是在处理一个shell关闭的事件中遇到的问题,未改之前的代码如下:
shell.addShellListener(new ShellAdapter() {
public void shellClosed(ShellEvent e) {
MessageBox msgbox = new MessageBox(shell,SWT.YES|SWT.NO|SWT.ICON_QUESTION);
msgbox.setText("退出");
msgbox.setMessage("你确定要退出吗?");
msgbox.open();
});
上面那一段代码的作用是:在点击shell的关闭按钮(即左上角的“X”时),会弹出一个对话框,为你“你确定要退出吗?”,我的本意是:在点击“是”的时候关闭窗口,不然则不关闭窗口。但是很不幸,无论我是点击“是”还是“否”,窗口都会义无反顾的消失。所以从这里我们可以看出,我们需要做一个判断,那么怎么判断呢,仔细思考我们可以发现,msgbox.open()返回的是一个int值,而我们的style便就是int值,好了,方法在瞬间找到了,我们只需要在open的时候判断到底是SWT.YES还是SWT.NO就可以确定我们点击为“是”或者“否”,重写代码如下:
shell.addShellListener(new ShellAdapter() {
public void shellClosed(ShellEvent e) {
MessageBox msgbox = new MessageBox(shell,SWT.YES|SWT.NO|SWT.ICON_QUESTION);
msgbox.setText("退出");
msgbox.setMessage("你确定要退出吗?");
if(msgbox.open() == SWT.YES) { //打开的时候判断值为YES
e.doit = true; //执行操作
} else {
e.doit = false;
}
}
});
在上面的代码中,我判断了在打开的时候为“YES”,然后将doit值设为ture,即执行操作,否则为false。好了,问题又来了,这个doit是个什么东东呢,不要着急,下面接着讲,不过现在我们的msgbox是真的可以判断我们的意图来执行操作了。 ^_^
4. Event中的doit
在上面的问题中我们看到了这样的代码段:
if(msgbox.open() == SWT.YES) { //打开的时候判断值为YES
e.doit = true; //执行操作
} else {
e.doit = false;
}
那么doit到底是何方神圣可以主宰我们事件的“真假”呢?这里揭开谜底,doit是Event类中的一个参数,
API中的定义:
boolean doit
API中的state:
depending on the event, a flag indicating whether the operation should be allowed.
从state中可以看出:doit依赖于event(事件),是一个指示操作是否被允许的标志。
当doit值为true时为允许,反之则不被允许。在上面的代码中,doit为true的时候,就被允许执行shellClosed的操作,所以当我们按下“是”的时候,shell被销毁了,而按下“否”的时候,shell便不会销毁。
好了,就写到这里了,我感觉写篇博客还是蛮累的,我写出这些东西来是因为我在开始研究swt中遇到的问题让我疑惑了很久,幸运的是,通过摸索,我解决了这些在我求知路上的障碍。作为一名初学者,写这样的文章完全是出于能够帮助和我有过同样疑惑的朋友,共享交流,互相学习。
相关推荐
Java图形界面开发:SWT全接触 教程
Java图形界面开发:SWT全接触 a book very good
支持功能有: 1. 跨行和跨列功能 2. 页码和页数统计 3. 边距和间距调整 4. 各边框颜色设置 5. 前景和背景颜色 .........资源里包括两个包。一个是SWT Report的项目包,另一个是CustomReportTest 类生成的报表
SWT 教程 适合初学者入门使用 SWT 教程 适合初学者入门使用
swt资源释放问题,详细介绍swt如何释放屏幕资源
基于SWT框架的Objects Java 快速入门,范例文档描述了从SWT框架安装到创建工程,实现地图基本操作功能的整个过程。
Eclipse开发经典教程,SWT中采用了布局方式,用户可使用布局来控制组件中元素的位置和大小等信息。
eclipse插件开发笔记第三章:SWT编程基础 eclipse插件开发笔记第三章:SWT编程基础 eclipse插件开发笔记第三章:SWT编程基础
Eclipse开发经典教程:常用SWT组件.pdf
不再为每个平台定制代码,不再为Linux安装特定的库,在Windows中使用IE不再出现问题,也不再存在与平台有关和与浏览器有关的问题。 这是一个真正的跨平台SWT浏览器,可在所有操作系统中无缝运行。 它基于并使用CEF...
即使在官方网站上也非常难找,示例包括以下内容:SWT模式窗体,SWT浏览器,SWT树,SWT工具条,SWT画图工具,SWT图形,SWT各种布局,SWT剪贴板,SWT快捷键,SWT菜单,SWT文本编辑器,SWT中的任何一个控件这里面都有...
swt是一些用于javaGUI即图形界面设计用的插件,但是当执行打包好的exe文件时,容易出现找不到jar包的错误,这里提供下载资源
SWT编程开发学习资料和一些实例代码,Eclipse开发经典教程:SWT开发
swt分析,分析手机出现的swt问题,具体描述了几种方法。swt分析,分析手机出现的swt问题,具体描述了几种方法。
SWT 的 PlotControl PlotControl 是一个简单的 SWT 小部件,用于绘制折线图。 它包括填充和描边合成曲线、处理正负 x/y 值、缩放以适应小部件空间以及标准或 MRTG 样式图的功能。 PlotControl 在 MIT 许可下可用。...
SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置
RxSWT-SWT中的React式编程 RxSWT基于并提供用于与SWT UI线程同步的自定义调度程序。 编码改编自 ,因为Android还具有一个... compile ' io.reactivex.swt:rxswt:0.1.0 ' // other dependencies ... } 玛文 <
eclipse插件开发: rcp/swt相关资料 rcp swt 插件开发
SWT 的范围滑块小部件 这个项目是来自的 RangeSlider 实现的一个分支。 下载 二进制版本(JAR 文件)可在下载。 相应的 Javadoc 可在下载。 文档 在线文档可以在找到。 执照 英超1.0
swt jface入门教材,适于初学者学习用。