posts - 28, comments - 27, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          首先是一個效果圖:

          login.JPG

          為了不違反保密協議,偶在這里把logo和相關的東西都涂掉了,希望不會讓人覺得難看....

          ok,下面就開始講述偶的coding過程:

          首先捏,Dialog是分為三部分的,Window Title Bar,Content Area和Button Bar

          這里的Window Title Bar素很難改動滴,偶也米改....而接下來的ContentArea和ButtonBar因為素分成兩截滴,所以就要把一張背景圖片拆成兩截,分別設置成ContentArea和ButtonBar的背景圖片鳥~~~
          ????protected?Control?createDialogArea(Composite?parent)?{
          ??????? Composite?composite?=?(Composite)?super.createDialogArea(parent);
          ????????composite.setBackgroundImage(backgroundImage);
          ??????? .......
          ??? }

          ??? protected?Control?createButtonBar(Composite?parent)?{
          ??????? Control?composite?
          =?super.createButtonBar(parent);
          ????????composite.setBackgroundImage(backgroundBtmImage);
          ??????? .......
          ???????
          return?composite;
          ????}

          當然,僅僅做到這些還是遠遠不夠滴,不信,你看~~~

          login2.JPG

          看到效果了咩....接下來偶們要做滴就是解決掉背景的問題,因為這個對話框里面沒有Table、Tree之類的控件,于是在createDialogArea()方法中加入一行:

          composite.setBackgroundMode(SWT.INHERIT_DEFAULT);

          我們再來看看改變后的效果:

          login3.JPG

          如上圖所示,介個ContentArea的背景問題已經解決鳥,下面就素重中之重滴ButtonArea鳥~~~讓我們打開Dialog的源代碼,看一下createButtonBar()的部分,就可以發現里面有兩行:

          ????????GridData?data?=?new?GridData(GridData.HORIZONTAL_ALIGN_END
          ????????????????
          |?GridData.VERTICAL_ALIGN_CENTER);
          ????????composite.setLayoutData(data);

          介樣子怎么能行捏,偶們需要讓介個Composite填滿整個DialogArea,這樣子才可以顯示出整個背景圖片,所以偶們就要在重寫后的方法中加入下面一行代碼:

          composite.setLayoutData(new?GridData(SWT.FILL,?SWT.TOP,?false,?false));

          現在讓偶們再來看看運行后的結果:

          login4.JPG

          為什么會素介個樣子捏?即使素把layout改成SWT.RIGHT,也不會改變介個結果...偶快要郁悶滴抓狂鳥.....

          經過漫長滴測試,偶終于發現鳥,如果控件滴layoutData不grabExcessSpace的話,那么現在滴DialogArea的Composite實際大小就素兩個Button加起來滴大小,所以無論如何也素不會居右對齊滴....介可怎么辦捏.....如果去重寫createButton方法滴話,那介個dialog滴代碼可就太丑陋鳥....

          在一個偶然滴機會下,偶終于發現鳥SWT.RIGHT_TO_LEFT !!!偶依稀見到鳥燦爛滴曙光!8過Composite的style素在創建時指定的,似乎米辦法在后面覆蓋,所以偶們只好整個滴把createButtonBar重寫掉鳥~~~

          ????protected?Control?createButtonBar(Composite?parent)?{
          ????????Composite?composite?
          =?new?Composite(parent,?SWT.RIGHT_TO_LEFT
          ????????????????
          |?SWT.NONE);
          ????????
          //?create?a?layout?with?spacing?and?margins?appropriate?for?the?font
          ????????
          //?size.
          ????????GridLayout?layout?=?new?GridLayout();
          ????????layout.makeColumnsEqualWidth?
          =?true;
          ????????layout.marginWidth?
          =?convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
          ????????layout.marginHeight?
          =?convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
          ????????layout.horizontalSpacing?
          =?convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
          ????????layout.verticalSpacing?
          =?convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
          ????????layout.marginLeft?
          =?10;
          ????????composite.setLayout(layout);
          ????????GridData?data?
          =?new?GridData(SWT.FILL,?SWT.TOP,?false,?false);
          ????????composite.setLayoutData(data);
          ????????composite.setFont(parent.getFont());

          ????????
          //?Add?the?buttons?to?the?button?bar.
          ????????createButtonsForButtonBar(composite);
          ??????? composite.setBackgroundImage(backgroundBtmImage);
          ????????
          return?composite;
          ????}

          在上面的代碼中,偶除了對偶所提到的地方進行了修改以外,還加上鳥一行: layout.marginLeft?=?10;

          介個素因為如果右邊距過小滴話,背景圖片就會被覆蓋掉一些,而因為偶們用到鳥
          SWT.RIGHT_TO_LEFT,所以應當設置marginLeft滴值 :-)

          還有一點素8能忘記滴,就素要重寫一下setButtonLayoutData(Button button)方法,因為偶們要把Button改成居右對齊:

          ????protected?void?setButtonLayoutData(Button?button)?{
          ????????GridData?data?
          =?new?GridData(SWT.RIGHT,?SWT.CENTER,?false,?false);
          ????????
          int?widthHint?=?convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
          ????????Point?minSize?
          =?button.computeSize(SWT.DEFAULT,?SWT.DEFAULT,?true);
          ????????data.widthHint?
          =?Math.max(widthHint,?minSize.x);
          ????????button.setLayoutData(data);
          ????}

          然后再在createButtonsForButtonBar()方法中,把創建按鈕的順序改變一下,偶們就可以看到最開始滴那張美麗滴對話框鳥~~~雖然被偶涂改滴有些不美麗鳥~~~

          現在還有個小小滴問題就素按鈕距離底端滴黑框太近鳥~~介個素因為,介個Composite只有一行,所以要改變按鈕距離底端滴距離,那么DialogArea滴大小就要跟著改變,而現在偶們滴DialogArea所需要滴背景圖片還米改好,于是只有這樣鳥~~~大家應該知道在哪里設置底邊的邊距吧?就素createButtonBar方法中滴那個layout.marginHeight =xxx :)

          最后別忘了,整個對話框的高度,應該是Window Title Bar,Content Area和Button Bar三部分滴和。

          偶已經說完鳥,如果覺得偶滴介篇文章對你有些幫助的朋友,請去支持一下偶們美麗可愛滴靚穎同學滴新專輯The One吧:)多謝!

          評論

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 10:05 by wolfsquare
          這是在寫技術文章,還是小學生作文?

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 11:43 by 小小涼粉
          偶只素想寫滴淺顯易懂一些.....

          wolfsquare對什么地方不滿意?

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 11:45 by 小小涼粉
          偶介個米深度咩?

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 14:53 by nickey
          能不能說中文?

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 20:05 by 慈悲魚
          覺得作者說話怪,是不是我太老了

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-17 21:45 by 小小涼粉
          作技術的人,也要關注一下流行好不好...

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2006-10-18 14:54 by 123bingbing
          增開7群,號碼 30440732
          8群 30756649
          9群 30178567
          10群 28694497

          我們的qq群:15096318 學習程序的都可以來

          # re: [rcp系列]用RCP做出漂亮的對話框[未登錄]  回復  更多評論   

          2008-05-05 09:52 by an
          不知所云~

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2008-05-16 17:44 by WHAPPLEKING
          實在太感謝了,要不我死也弄不出來啊

          # re: [rcp系列]用RCP做出漂亮的對話框[未登錄]  回復  更多評論   

          2008-08-21 16:49 by 路人乙
          不錯 贊

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2008-09-28 23:02 by 桃花島主
          你的文章還是不錯的,但通俗易懂也不是這樣寫呀,請把 捏鳥 之類的去掉啊,我看著頭疼,真的.我都是煞眉頭看的.因為這并不是網絡語言,根本就是你們地方土話啊!

          # re: [rcp系列]用RCP做出漂亮的對話框  回復  更多評論   

          2011-11-25 11:41 by shenfx
          看完我整個人都鳥了~

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 龙里县| 上林县| 永川市| 孟州市| 丽江市| 皋兰县| 延川县| 康马县| 绥宁县| 仪征市| 东丽区| 永福县| 泰州市| 汉源县| 萝北县| 大荔县| 石台县| 延长县| 商都县| 思南县| 五家渠市| 开封市| 吴忠市| 汉沽区| 来安县| 蕲春县| 邛崃市| 大渡口区| 读书| 天气| 左云县| 冀州市| 乳源| 定西市| 彭山县| 清丰县| 时尚| 兴安县| 托克托县| 色达县| 虎林市|