gr8vyguy@Blogjava

意义非凡的SWTSwing项目

SWTSwing是由Christopher Deckers开发一个开源项目,目的是将SWT移植到Swing上面。初看这个项目感觉很搞笑,仔细一想,如果这个项目成功了,意义不小。想像一下,那时候你用SWT开发的Java程序的界面就可以是原生的(真正的原生,而不是模拟的),可以是Motif的,Metal的,或者任何一种Swing的LookAndFeel。

SWTSwing的项目网址是http://swtswing.sourceforge.net

下载他的程序包,解压后可以运行SWTSwingSnippetLauncher.jar,看到如下窗口

 

在Look And Feel文本框里输入不同的LookAndFeel类,就可以用不同的LookAndFeel启动左边树形框里选择的程序。

比如用javax.swing.plaf.metal.MetalLookAndFeel启动ExpandBar


用Sun的Windows LookAndFeel类com.sun.java.swing.plaf.windows.WindowsLookAndFeel


com.sun.java.swing.plaf.motif.MotifLookAndFeel


如果你指定SWT的Jar路径,即用原生的控件库,首先在上面的Combo里面选择SWT,而非SWTSwing,在Class-Path里输入你的swt.jar的路径,比如我的C:\Java\tools\swt.jar


目前SWTSwing的版本是3.2,Eclipse,Azureus,RSSOwl等著名的基于SWT的程序已经可以在SWTSwing上跑了,76%的SWT网站上的Snippets也可以运行。

当然这样两层的嵌套,不可避免的会影响程序的性能。

posted on 2007-05-03 13:44 gr8vyguy 阅读(2853) 评论(19)  编辑  收藏 所属分类: Java

评论

# re: 意义非凡的SWTSwing项目 2007-05-04 03:24 BeanSoft

呵呵, 我是用他这个包来学习 SWT, 因为一点击就能运行, 还能看代码, 真的很不错!  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-04 06:31 Roger

“就可以是原生的(真正的原生,而不是模拟的)”
你好像说错了,应该是:就可以是模拟的(真正模拟的,不是原生的)
SWT是原生,swing是模拟的。
其实使用swt做桌面应用,为什么不用c#来做呢?我觉得swt既没有swing的跨平台,又没有c#的本地化,swt没有自己的特色。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-04 09:04 Pande

@Roger
我的意思是说,有了SWTSwing,用SWT写的程序,即可以用原生的界面,也可用Swing模拟的界面。这才是SWTSwing的意义所在。

SWT确实走的是Swing和C#之间的一条路线,这就是SWT的特色

SWT不如Swing那样跨平台,但是跨平台性能还是很好的,也足够。

"没有c#的本地化", 这我不同意,SWT和C#同样都是对Windows API的封装,没有本质的区别  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 10:31 Roger

@Pande
你说:"没有c#的本地化", 这我不同意,SWT和C#同样都是对Windows API的封装,没有本质的区别

不好意思,我觉得你对C++和c#并没有做深入的研究。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 11:02 Pande

@Roger
能否请你具体点说说,你指得深入的研究是什么?  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 11:51 Roger

简单的举个例子,c#可以直接调用dll、com、windows APIs、active X、windows的钩子和注册表等,而swt不通过第三软件包和jni,这些都可以做到吗?或者说只使用官方swt版本这些事情都可以做的很好吗?  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 12:16 Pande

@Roger
SWT对Windows原生功能的封装当然不如C#全,但这只是量的不同,不是质的不同。所以我说没有本质的区别。  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 12:29 Roger

我且不说它们调用的方式有没有质的区别。
我想说,量变会引起质变,你觉得有1块人民币和有1亿人民币之间只有量的区别吗?  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 12:40 Pande

@Roger
既然你说到了注册表,我就拿它当一个例子。

SWT是没有封装Windows注册表的读写操作,象C#中那样爽的Microsoft.Win32.Registry类包。但是在SWT实现这样的工具类包是很容易的,
RegOpenKeyEx, RegQueryValueEx等等几个操作注册表的函数在SWT的OS中都已经实现了,我想C#也是使用这些Windows API实现的。

当然使用这样的功能,无疑迫害可移植性。这也是SWT的官方包没有包含你所举的这些功能的缘故。

SWT已经用org.eclipse.swt.ole.win32封装Active X的使用,你完全可以在SWT中使用Active X。很多Windows API都已经在OS中实现接口了,Java和Windows之间的数据传递大多都已经实现了,连CallBack函数也能用SWT的Callback类轻易做到,SetWindowsHookEx函数你也可以在SWT中直接调用,但是由于全局钩子要放在独立的dll中,当然还得借助jni,但是实现并不困难。COM和Active X是不是一回事?我就不是很清楚了。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 12:44 Pande

@Roger
SWT和C#是1块人民币和1亿人民币的区别吗?

最多也就是9000和10000的区别(而且还是单单考虑Windows平台下)。

如果考虑跨平台的因素,那就是20000和10000的区别。  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 13:54 Roger

@Pande
你觉得:最多也就是9000和10000的区别(而且还是单单考虑Windows平台下)。
我举个例子:一个系统原来是用c++开发的,或者现在开发一个系统其部分模块是c++开发的(现实中是很多的),有大量dll和com,现在需要用改造或开发新功能,你觉得用swt和c#没有本质的区别吗?如果你用swt,需要给每个dll都写jni,如果是c#,那么就一个都不用写,如果dll有未知数量个,你觉得是多少和多少的区别?世界上有多少个dll和com你数的清吗?

你觉得:如果考虑跨平台的因素,那就是20000和10000的区别。
我比较的是windows下,跨平台的swt比不上swing。跨平台和可移植性不在我想讨论的范围之列。

注意:我想反驳的你的观点是,
"没有c#的本地化", 这我不同意,SWT和C#同样都是对Windows API的封装,没有本质的区别  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 14:10 Roger

active X是建立在com之上的。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 14:18 Pande

@Roger
如果要大量再利用C++的遗留dll,用Java确实不合适。我之前只考虑了重新开发这一块。

但,即使考虑到遗留系统,你也可以再利用现有系统的功能,把所有你要用的功能封装在一个Dll里,SWT就是这么做的,Windows API也不是只有一个dll。你不需要为每个dll写JNI。

假设你确实需要能访问现存的每个dll里的每个函数的话,目前的Java确实没有提供很好的支持。

对遗留程序的支持是每门新语言都要面对的问题,Java不新了,这个问题我相信有很多人讨论过。C#之于C/C++能做到的程度,难道Java就做不到吗?虽然我没研究过这一点,但是我相信是可以做到的。如果要做到的话,我相信必须走SWT这条路子,而不是Swing的模拟路线。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 14:40 Pande

@Roger
另外,我想请教,假设你设计一门很成功新语言,要为它开发一套窗口界面控件库,你会选择Swing的路子还是SWT的路子呢?

>>> 注意:我想反驳的你的观点是,
>>> "没有c#的本地化", 这我不同意,SWT和C#同样都是对Windows API的封装,没有本质的区别

看了你的回帖,我承认目前的Java+SWT是没有100%的C#的本地化,但是相差不是很大。而且不是做不到,而是Java没有向这个方向发展。这也是SWT出现最大的意义所在。  回复  更多评论   

# re: 意义非凡的SWTSwing项目[未登录] 2007-05-11 15:27 Roger

说实话,我没有能力去设计新的语言。
但我觉得选择那条路完全决定于操作系统,在windows下面大多语言都比不上微软自己设计的语言,delphi是很优秀的,但是相比之下,它的结局就比不上c++,perl很优秀,但是它就比不上c,所以如果我要设计一门语言,我不会只考虑在windows下面运行,如果在其它平台下面运行,那么我一定会考虑平台一致性。
微软的操作系统是非常不错的,但是不表示它是完美的,只要它不是完美的,那么就会有其它系统的生存空间,如果有其它系统的生存空间,那么它的系统就需要好的语言。只要系统还存在,那么这样的好语言就会有它存在的价值和存在的理由。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-05-11 15:59 Pande

@Roger
看来你还是保持要么Swing,要么C#的观点。我还是选择SWT的中庸之道。

不管怎么样,和你的讨论还是获益匪浅。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-07-10 15:32 阿南

我还是觉得SWT离开了Eclipse就是个四不像的东西了~SWT出现就是了为了Eclipse的本地化和高速度的~还有缔造了Eclipse的简单的平台平移。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-07-11 00:11 Pande

@阿南
每次有人说SWT的好话时,总会有人出来反对。好像这也是一股潮流。争论太多也没意思。  回复  更多评论   

# re: 意义非凡的SWTSwing项目 2007-07-13 03:23 三告习习

情人眼里出西施。
程序员都会有自己的语言和语言中的某种技术。
很多时候的喜好争辩没有多大意义吧。
我说你女朋友很漂亮是表示我很羡慕你有这么漂亮的女朋(除了客套话吧,呵呵)。
我说你女朋一点的不漂亮有什么意义呢?或许我说的也比较客观,但是,你喜欢她的不是别人眼里的漂亮或者不漂亮吧。
如果你觉得漂亮是最重要的,那么你努力成为大款......
就像,即使你说的C#,delphi很好,但是我对C#,delphi不熟悉,我要使用它,也得拼死命扎在C#,delphi资料中。但是,我的熟悉swt呢?我喜欢的是她,我还想再深入下去,我也还得花时间,我干嘛非要抛弃swt来选什么C#啊,swt又不是没落了。
能有SWTSwing这样的东西给swt添加点色彩总是不错的,呵呵,即使没有,也不是什么大问题。我选择swt不是为了去玩SWTSwing。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

  • 转载请注明出处.
  • msn: gr8vyguy at live.com
  • 常用链接

    留言簿(9)

    随笔分类(68)

    随笔档案(80)

    文章分类(1)

    My Open Source Projects

    搜索

    积分与排名

    最新评论