[Eclipse笔记]SWT设计思路

笔记|设计

 

本文部分内容和灵感来自eclipse.org网站,特此声明。更多内容,请参考:

http://eclipse.org/articles/Article-SWT-Design-1/SWT-Design-1.html

 

众所周知,SWT与Swing最大的不同就是它直接使用操作系统提供的现成的本地图形接口,于是具备本地化的Look & Feel。但是它是怎么做到这一点的呢,当然是通过JNI。我们来看一个例子,假定我们使用Win32的API。

我们现在有一个文本框text,通过如下的代码,我们给它一个字符串,并让它选择/highlight从3~5([3,5])的字符。
text.setText(“abcdefgh”);text.setSelection(3, 6);
在Windows下,这个setSelection方法是怎么实现的呢?我们可以看看源码:

public void setSelection (int start, int end) {       …       OS.SendMessage (handle, OS.EM_SETSEL, start, end);       OS.SendMessage (handle, OS.EM_SCROLLCARET, 0, 0);}
做过Windows编程的朋友可能一下子就认出了这个SendMessage,这不就是Win32 API中用于向窗体发送消息的函数吗?呵呵,没错,我们再来看一下这个SendMessage方法的原型:

public static final int SendMessage (int hWnd, int Msg, int wParam, int lParam) {       if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);       return SendMessageA (hWnd, Msg, wParam, lParam);}public static final native int SendMessageW (int hWnd, int Msg, int wParam, int lParam);public static final native int SendMessageA (int hWnd, int Msg, int wParam, int lParam);
我们看到了两个版本,一个版本针对Unicode,另一个版本针对ASCII,正好Win32 API也是如此,我们在这里看到的是native的方法,这意味着具体还有一组JNI的C代码来直接与操作系统的函数打交道:

#ifndef NO_SendMessageW__IIIIJNIEXPORT jint JNICALL OS_NATIVE(SendMessageW__IIII)       (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3){       jint rc;       OS_NATIVE_ENTER(env, that, SendMessageW__IIII_FUNC);       rc = (jint)SendMessageW((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);       OS_NATIVE_EXIT(env, that, SendMessageW__IIII_FUNC);       return rc;}#endif#ifndef NO_SendMessageA__IIIIJNIEXPORT jint JNICALL OS_NATIVE(SendMessageA__IIII)       (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3){       jint rc;       OS_NATIVE_ENTER(env, that, SendMessageA__IIII_FUNC);       rc = (jint)SendMessageA((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);       OS_NATIVE_EXIT(env, that, SendMessageA__IIII_FUNC);       return rc;}#endif
看到这里,你也许已经恍然大悟:SWT所做的无非就是把Win32的API简单的包装了一下,我们在SWT这一层调用的方法、传递的参数被原封不动的代理到了Win32层。这就是SWT的核心思想。SWT有一个很重要的设计原则,那就是,SWT的API一对一的封装OS的API,完全忠实于操作系统的API实现的行为,如果有bug,那也是OS的bug,它不会尝试去“纠正”操作系统,因为那样会潜在的破坏本地化的一些行为。忠实于OS也使得调用者不必但心自己的SWT程序会跟OS的本地GUI有不一致的地方,如有必要直接参考MSDN即可。SWT其实就是这样一个thin wrapper,我们通过它可以方便的访问Win32的图形API,为我们的应用程序提供native的Look & Feel。

下面给出一个完整的SWT示例:
package sean.test.swt;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Text;public class DummySWT {       public static void main(String[] args) {              final Display display = new Display();              final Shell shell = new Shell(display);              shell.setLayout(new FillLayout());              final Text text = new Text(shell, SWT.SINGLE);              text.setText("abcdefgh");              text.setSelection(3, 6);              shell.pack();              shell.open();              while (!shell.isDisposed()) {                     if (!display.readAndDispatch()) {                            display.sleep();                     }              }              display.dispose();       }}

时间: 2024-07-31 04:47:56

[Eclipse笔记]SWT设计思路的相关文章

在Eclipse中用SWT设计界面

1. 为什么要使用SWT? SWT是一个IBM开发的跨平台GUI开发工具包.至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swing, Java 2D, Java 3D等构成的Java GUI框架,那就说来话长了.(记得在一个BBS上读过一个关于SWT起源的调侃类的帖子). 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包AWT (Abstract Windowing Toolkit).虽然AWT框架也使用的是原生窗口部件(native wid

WIN8设计特性浅谈和腾讯微博MS首版设计思路分享

中介交易 SEO诊断 淘宝客 云主机 技术大厅 作者:dengxuecui(崔登学) miaotong(佟淼) 10月,一个收获的季节,微软的新一代操作系统window8悄然而至,同时,我们的微博客户端团队,也搭上了第一波win8应用的末班车,设计并推出了腾讯微博MS版本.本文将结合腾讯微博MS版本的设计过程以及对win8系统特性的认识,聊聊win8操作的平台的应用设计. 文章很长,请选择有价值的部分阅读,或许你敢把它读完呢- 本文索引: 1. Windows8-再构想 2. Win8的系统特性

求一个设计思路,关于登录地点

问题描述 求一个设计思路,关于登录地点 用C#做了一个程序,有前台后台,想在后台能够配置一共有几点登录地点 然后这些地点登录后,后台数据库可以有记录 解决方案 如果登陆点有固定的 IP,可以考虑使用 IP 做为每个固定点的登陆标志,再给每个登陆点分配密码. 这样每个登陆点使用自己的 IP 和密码登陆后台服务器,服务器就可以记录了.

Eclipse中用SWT和JFace开发入门

可以使用标准窗口小部件工具箱(Standard Widget Toolkit,SWT)和 JFace 库来开发用于 Eclipse 环境的图形用户界面,而且还可以将它们用于开发单独的 GUI 本机应用程序.在本文中,我将介绍一些基本的 SWT(基本 GUI 对象的名称)类型,并展示如何综合使用它们来创建有用的应用程序. 关于 Eclipse.SWT 和 JFace 正如 Eclipse 的 Web 站点上所提到的,Eclipse 是一种通用工具平台.它是一个开放的.可用于任何东西的可扩展 IDE

至顶而下的设计思路:QQ空间V6.0版

文章描述:设计中的继承与颠覆:以QQ空间V6设计产品升级为例. 空间诞生6年了,终于再一次升级,迎来了革新的V6.0版,它是近年来最重要的版本升级,肩负着空间的战略转型,促进平台开放,提升营收与活跃用户的重任.所以这一版本的升级,我们改变从前自细节入手,直接优化流程与表现的设计思路.而是从全局的角度切入,重新思考平台的定位策略,进一步整合信息架构,颠覆表现层的交互体验,提升用户对QQ空间的品牌认知与情感认同.改变过去每一次升级后,新增加的特性与功能为空间造成的臃肿复杂的现状 所以引入了Jesse

产品设计思路:寻找产品的性格

文章描述:如何在设计中寻找产品的性格. 在前一文发表之后,我收到了不少邮件,有点出乎意料但又在猜想之中的是,这些邮件之中交互设计行业远多于工业设计行业,互联网行业远多于实体产品行业,而我仍想从事实体产品的工业设计. 但我也确实对交互设计对互联网非常感兴趣,甚至有意愿涉足,这种想法来源于对设计行业的变化的认同和理解.设计发生变化了,表面看或许是交互设计及相关设计的兴起,传统工业设计在一些情形上的隐退等这一些现象,但更深层的是整个设计的变化,不只是一个领域的设计替代另一个领域的设计,工业设计同样也发

百度首页专题设计思路的具体分析

新年为百度设计的春节专题系统,因为专题是为春节回家购物等提供帮助和信息,怎样将信息表现得易用和友好是最重要的.所以对此类专题设计思路进行了具体分析. 春节前接到了制作春节专题的,这次制作,希望能新年展现在百度首页的春节专题具有百度风格,也就是说我们理解的新年热闹气氛的专题风格需要做改变.因为专题是为春节回家购物等提供帮助和信息,怎样将信息表现得易用和友好是最重要的.所以对此类专题设计思路进行了具体分析.感谢钱夫人.blueui.rainbowowo.红豆派给予的建议和帮助,专题最终通过并获得了大

fastm设计思路深度剖析

1.PHP(&fastm)把文档切割为简单的DOM结构 PHP模板的设计思路非常漂亮,用注释里的Begin和End把HTML(WML,或任何XML)页面切割成不同的块,而且块里面还可以继续切块. 这样一来,一个页面被切割成一个树结构,很象DOM结构.只是DOM结构太过笨重,对每一个元素都要建立一个节点,而且节点的类型非常复杂.比如,一个HTML DOM结构,有多少种HTML元素,就会有多少种节点类型,比如,Body,Table,TR,TD,Form,Input等. 而PHP模板则是一个轻量级的D

“私有云”安全的“过渡”时期:“云朵”方案的设计思路

一.私有云安全的尴尬现状 云计算因为能够提供虚拟化的资源池.弹性的服务能力.自助服务等,深得CIO们的青睐,为了提高企业IT设备的利用率,提高服务容灾的能力,提高对业务支撑的快速响应能力,大多数的企业都开始尝试企业私有云的建设. 一般来说,从现有的IT管理体系过渡到私有云平台,大致需要几个步骤:数据大集中.业务系统整合.IT资源的虚拟化.管理平台云化.云服务提供.(很多人认为私有云就是信息中心的建设,其实信息中心的虚拟化改造一般是最后两个阶段合并为信息中心的统一运维管理平台,而不一定会提供云服务