gr8vyguy@Blogjava

          意義非凡的SWTSwing項(xiàng)目

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

          SWTSwing的項(xiàng)目網(wǎng)址是http://swtswing.sourceforge.net

          下載他的程序包,解壓后可以運(yùn)行SWTSwingSnippetLauncher.jar,看到如下窗口

           

          在Look And Feel文本框里輸入不同的LookAndFeel類,就可以用不同的LookAndFeel啟動(dòng)左邊樹形框里選擇的程序。

          比如用javax.swing.plaf.metal.MetalLookAndFeel啟動(dòng)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也可以運(yùn)行。

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

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

          評論

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-04 03:24 BeanSoft

          呵呵, 我是用他這個(gè)包來學(xué)習(xí) SWT, 因?yàn)橐稽c(diǎn)擊就能運(yùn)行, 還能看代碼, 真的很不錯(cuò)!  回復(fù)  更多評論   

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-04 09:04 Pande

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

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

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

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

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 11:02 Pande

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 12:16 Pande

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 12:40 Pande

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

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 12:44 Pande

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

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

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

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

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

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

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 14:18 Pande

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

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 14:40 Pande

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

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

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

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-05-11 15:59 Pande

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

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-07-10 15:32 阿南

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

          # re: 意義非凡的SWTSwing項(xiàng)目 2007-07-11 00:11 Pande

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

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

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          公告

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

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 巴中市| 平阳县| 碌曲县| 改则县| 山阴县| 盘锦市| 巴里| 抚宁县| 四子王旗| 资源县| 景谷| 吐鲁番市| 油尖旺区| 昭苏县| 文昌市| 昆山市| 信宜市| 堆龙德庆县| 瑞丽市| 拉萨市| 南通市| 南溪县| 和顺县| 嵊泗县| 峨眉山市| 天峻县| 泰兴市| 永和县| 锦州市| 大田县| 政和县| 阳谷县| 永丰县| 双流县| 枣阳市| 成武县| 闽侯县| 临朐县| 兰西县| 桦南县| 滦南县|