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 閱讀(2884) 評論(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年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          公告

        1. 轉載請注明出處.
        2. msn: gr8vyguy at live.com
        3. 常用鏈接

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 平果县| 凤城市| 赣州市| 三原县| 兰西县| 尉犁县| 金山区| 天等县| 稻城县| 清新县| 岳阳市| 濮阳县| 余姚市| 左权县| 临夏县| 德格县| 新沂市| 云龙县| 辉县市| 北辰区| 隆子县| 呼伦贝尔市| 山东省| 乌鲁木齐市| 剑川县| 青田县| 吴川市| 绥芬河市| 罗甸县| 莱西市| 镇远县| 康乐县| 南京市| 宜州市| 牟定县| 泸水县| 甘孜县| 盈江县| 凤山县| 肥东县| 静安区|