gr8vyguy@Blogjava

          意義非凡的SWTSwing項目

          SWTSwing是由Christopher Deckers開發(fā)一個開源項目,目的是將SWT移植到Swing上面。初看這個項目感覺很搞笑,仔細(xì)一想,如果這個項目成功了,意義不小。想像一下,那時候你用SWT開發(fā)的Java程序的界面就可以是原生的(真正的原生,而不是模擬的),可以是Motif的,Metal的,或者任何一種Swing的LookAndFeel。

          SWTSwing的項目網(wǎng)址是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的程序已經(jīng)可以在SWTSwing上跑了,76%的SWT網(wǎng)站上的Snippets也可以運行。

          當(dāng)然這樣兩層的嵌套,不可避免的會影響程序的性能。

          posted on 2007-05-03 13:44 gr8vyguy 閱讀(2884) 評論(19)  編輯  收藏 所屬分類: Java

          評論

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

          呵呵, 我是用他這個包來學(xué)習(xí) SWT, 因為一點擊就能運行, 還能看代碼, 真的很不錯!  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-04 06:31 Roger

          “就可以是原生的(真正的原生,而不是模擬的)”
          你好像說錯了,應(yīng)該是:就可以是模擬的(真正模擬的,不是原生的)
          SWT是原生,swing是模擬的。
          其實使用swt做桌面應(yīng)用,為什么不用c#來做呢?我覺得swt既沒有swing的跨平臺,又沒有c#的本地化,swt沒有自己的特色。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目 2007-05-04 09:04 Pande

          @Roger
          我的意思是說,有了SWTSwing,用SWT寫的程序,即可以用原生的界面,也可用Swing模擬的界面。這才是SWTSwing的意義所在。

          SWT確實走的是Swing和C#之間的一條路線,這就是SWT的特色

          SWT不如Swing那樣跨平臺,但是跨平臺性能還是很好的,也足夠。

          "沒有c#的本地化", 這我不同意,SWT和C#同樣都是對Windows API的封裝,沒有本質(zhì)的區(qū)別  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 10:31 Roger

          @Pande
          你說:"沒有c#的本地化", 這我不同意,SWT和C#同樣都是對Windows API的封裝,沒有本質(zhì)的區(qū)別

          不好意思,我覺得你對C++和c#并沒有做深入的研究。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目 2007-05-11 11:02 Pande

          @Roger
          能否請你具體點說說,你指得深入的研究是什么?  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 11:51 Roger

          簡單的舉個例子,c#可以直接調(diào)用dll、com、windows APIs、active X、windows的鉤子和注冊表等,而swt不通過第三軟件包和jni,這些都可以做到嗎?或者說只使用官方swt版本這些事情都可以做的很好嗎?  回復(fù)  更多評論   

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

          @Roger
          SWT對Windows原生功能的封裝當(dāng)然不如C#全,但這只是量的不同,不是質(zhì)的不同。所以我說沒有本質(zhì)的區(qū)別。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 12:29 Roger

          我且不說它們調(diào)用的方式有沒有質(zhì)的區(qū)別。
          我想說,量變會引起質(zhì)變,你覺得有1塊人民幣和有1億人民幣之間只有量的區(qū)別嗎?  回復(fù)  更多評論   

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

          @Roger
          既然你說到了注冊表,我就拿它當(dāng)一個例子。

          SWT是沒有封裝Windows注冊表的讀寫操作,象C#中那樣爽的Microsoft.Win32.Registry類包。但是在SWT實現(xiàn)這樣的工具類包是很容易的,
          RegOpenKeyEx, RegQueryValueEx等等幾個操作注冊表的函數(shù)在SWT的OS中都已經(jīng)實現(xiàn)了,我想C#也是使用這些Windows API實現(xiàn)的。

          當(dāng)然使用這樣的功能,無疑迫害可移植性。這也是SWT的官方包沒有包含你所舉的這些功能的緣故。

          SWT已經(jīng)用org.eclipse.swt.ole.win32封裝Active X的使用,你完全可以在SWT中使用Active X。很多Windows API都已經(jīng)在OS中實現(xiàn)接口了,Java和Windows之間的數(shù)據(jù)傳遞大多都已經(jīng)實現(xiàn)了,連CallBack函數(shù)也能用SWT的Callback類輕易做到,SetWindowsHookEx函數(shù)你也可以在SWT中直接調(diào)用,但是由于全局鉤子要放在獨立的dll中,當(dāng)然還得借助jni,但是實現(xiàn)并不困難。COM和Active X是不是一回事?我就不是很清楚了。  回復(fù)  更多評論   

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

          @Roger
          SWT和C#是1塊人民幣和1億人民幣的區(qū)別嗎?

          最多也就是9000和10000的區(qū)別(而且還是單單考慮Windows平臺下)。

          如果考慮跨平臺的因素,那就是20000和10000的區(qū)別。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 13:54 Roger

          @Pande
          你覺得:最多也就是9000和10000的區(qū)別(而且還是單單考慮Windows平臺下)。
          我舉個例子:一個系統(tǒng)原來是用c++開發(fā)的,或者現(xiàn)在開發(fā)一個系統(tǒng)其部分模塊是c++開發(fā)的(現(xiàn)實中是很多的),有大量dll和com,現(xiàn)在需要用改造或開發(fā)新功能,你覺得用swt和c#沒有本質(zhì)的區(qū)別嗎?如果你用swt,需要給每個dll都寫jni,如果是c#,那么就一個都不用寫,如果dll有未知數(shù)量個,你覺得是多少和多少的區(qū)別?世界上有多少個dll和com你數(shù)的清嗎?

          你覺得:如果考慮跨平臺的因素,那就是20000和10000的區(qū)別。
          我比較的是windows下,跨平臺的swt比不上swing??缙脚_和可移植性不在我想討論的范圍之列。

          注意:我想反駁的你的觀點是,
          "沒有c#的本地化", 這我不同意,SWT和C#同樣都是對Windows API的封裝,沒有本質(zhì)的區(qū)別  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 14:10 Roger

          active X是建立在com之上的。  回復(fù)  更多評論   

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

          @Roger
          如果要大量再利用C++的遺留dll,用Java確實不合適。我之前只考慮了重新開發(fā)這一塊。

          但,即使考慮到遺留系統(tǒng),你也可以再利用現(xiàn)有系統(tǒng)的功能,把所有你要用的功能封裝在一個Dll里,SWT就是這么做的,Windows API也不是只有一個dll。你不需要為每個dll寫JNI。

          假設(shè)你確實需要能訪問現(xiàn)存的每個dll里的每個函數(shù)的話,目前的Java確實沒有提供很好的支持。

          對遺留程序的支持是每門新語言都要面對的問題,Java不新了,這個問題我相信有很多人討論過。C#之于C/C++能做到的程度,難道Java就做不到嗎?雖然我沒研究過這一點,但是我相信是可以做到的。如果要做到的話,我相信必須走SWT這條路子,而不是Swing的模擬路線。  回復(fù)  更多評論   

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

          @Roger
          另外,我想請教,假設(shè)你設(shè)計一門很成功新語言,要為它開發(fā)一套窗口界面控件庫,你會選擇Swing的路子還是SWT的路子呢?

          >>> 注意:我想反駁的你的觀點是,
          >>> "沒有c#的本地化", 這我不同意,SWT和C#同樣都是對Windows API的封裝,沒有本質(zhì)的區(qū)別

          看了你的回帖,我承認(rèn)目前的Java+SWT是沒有100%的C#的本地化,但是相差不是很大。而且不是做不到,而是Java沒有向這個方向發(fā)展。這也是SWT出現(xiàn)最大的意義所在。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目[未登錄] 2007-05-11 15:27 Roger

          說實話,我沒有能力去設(shè)計新的語言。
          但我覺得選擇那條路完全決定于操作系統(tǒng),在windows下面大多語言都比不上微軟自己設(shè)計的語言,delphi是很優(yōu)秀的,但是相比之下,它的結(jié)局就比不上c++,perl很優(yōu)秀,但是它就比不上c,所以如果我要設(shè)計一門語言,我不會只考慮在windows下面運行,如果在其它平臺下面運行,那么我一定會考慮平臺一致性。
          微軟的操作系統(tǒng)是非常不錯的,但是不表示它是完美的,只要它不是完美的,那么就會有其它系統(tǒng)的生存空間,如果有其它系統(tǒng)的生存空間,那么它的系統(tǒng)就需要好的語言。只要系統(tǒng)還存在,那么這樣的好語言就會有它存在的價值和存在的理由。  回復(fù)  更多評論   

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

          @Roger
          看來你還是保持要么Swing,要么C#的觀點。我還是選擇SWT的中庸之道。

          不管怎么樣,和你的討論還是獲益匪淺。  回復(fù)  更多評論   

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

          我還是覺得SWT離開了Eclipse就是個四不像的東西了~SWT出現(xiàn)就是了為了Eclipse的本地化和高速度的~還有締造了Eclipse的簡單的平臺平移。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目 2007-07-11 00:11 Pande

          @阿南
          每次有人說SWT的好話時,總會有人出來反對。好像這也是一股潮流。爭論太多也沒意思。  回復(fù)  更多評論   

          # re: 意義非凡的SWTSwing項目 2007-07-13 03:23 三告習(xí)習(xí)

          情人眼里出西施。
          程序員都會有自己的語言和語言中的某種技術(shù)。
          很多時候的喜好爭辯沒有多大意義吧。
          我說你女朋友很漂亮是表示我很羨慕你有這么漂亮的女朋(除了客套話吧,呵呵)。
          我說你女朋一點的不漂亮有什么意義呢?或許我說的也比較客觀,但是,你喜歡她的不是別人眼里的漂亮或者不漂亮吧。
          如果你覺得漂亮是最重要的,那么你努力成為大款......
          就像,即使你說的C#,delphi很好,但是我對C#,delphi不熟悉,我要使用它,也得拼死命扎在C#,delphi資料中。但是,我的熟悉swt呢?我喜歡的是她,我還想再深入下去,我也還得花時間,我干嘛非要拋棄swt來選什么C#啊,swt又不是沒落了。
          能有SWTSwing這樣的東西給swt添加點色彩總是不錯的,呵呵,即使沒有,也不是什么大問題。我選擇swt不是為了去玩SWTSwing。  回復(fù)  更多評論   

          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          公告

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

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 蒲城县| 永吉县| 万全县| 勃利县| 清镇市| 盘山县| 青州市| 北流市| 丽江市| 松原市| 铁岭市| 怀远县| 辽阳县| 郸城县| 海林市| 兰西县| 左云县| 和政县| 桃江县| 宿迁市| 昌图县| 县级市| 灵武市| 大余县| 拜城县| 二连浩特市| 任丘市| 高密市| 绥阳县| 太谷县| 五大连池市| 甘德县| 铁岭县| 泰兴市| 马山县| 苍山县| 汕尾市| 寿宁县| 当涂县| 运城市| 出国|