用RCP做出漂亮的对话框

首先是一个效果图:

login.JPG

为了不违反保密协议,偶在这里把logo和相关的东西都涂掉了,希望不会让人觉得难看....

ok,下面就开始讲述偶的coding过程:

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

这里的Window Title Bar素很难改动滴,偶也米改....而接下来的ContentArea和ButtonBar因为素分成两截滴,所以就要把一张背景图片拆成两截,分别设置成ContentArea和ButtonBar的背景图片鸟~~~


 
  1. protected Control createDialogArea(Composite parent) {  
  2.     Composite composite = (Composite) super.createDialogArea(parent);  
  3.     composite.setBackgroundImage(backgroundImage);  
  4.     .......  
  5. }  
  6.   
  7. protected Control createButtonBar(Composite parent) {  
  8.     Control composite = super.createButtonBar(parent);  
  9.     composite.setBackgroundImage(backgroundBtmImage);  
  10.     .......  
  11.     return composite;  
  12. }  

当然,仅仅做到这些还是远远不够滴,不信,你看~~~

login2.JPG

看到效果了咩....接下来偶们要做滴就是解决掉背景的问题,因为这个对话框里面没有Table、Tree之类的控件,于是在createDialogArea()方法中加入一行:

  1. composite.setBackgroundMode(SWT.INHERIT_DEFAULT);  

我们再来看看改变后的效果:

login3.JPG

如上图所示,介个ContentArea的背景问题已经解决鸟,下面就素重中之重滴ButtonArea鸟~~~让我们打开Dialog的源代码,看一下createButtonBar()的部分,就可以发现里面有两行:

 
  1. GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END  
  2.          | GridData.VERTICAL_ALIGN_CENTER);  
  3.  composite.setLayoutData(data);  

介样子怎么能行捏,偶们需要让介个Composite填满整个DialogArea,这样子才可以显示出整个背景图片,所以偶们就要在重写后的方法中加入下面一行代码:


 
  1. composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, falsefalse));  


现在让偶们再来看看运行后的结果:

login4.JPG

为什么会素介个样子捏?即使素把layout改成SWT.RIGHT,也不会改变介个结果...偶快要郁闷滴抓狂鸟.....

经过漫长滴测试,偶终于发现鸟,如果控件滴layoutData不grabExcessSpace的话,那么现在滴DialogArea的Composite实际大小就素两个Button加起来滴大小,所以无论如何也素不会居右对齐滴....介可怎么办捏.....如果去重写createButton方法滴话,那介个dialog滴代码可就太丑陋鸟....

在一个偶然滴机会下,偶终于发现鸟SWT.RIGHT_TO_LEFT !!!偶依稀见到鸟灿烂滴曙光!8过Composite的style素在创建时指定的,似乎米办法在后面覆盖,所以偶们只好整个滴把createButtonBar重写掉鸟~~~


 
  1. protected Control createButtonBar(Composite parent) {  
  2.         Composite composite = new Composite(parent, SWT.RIGHT_TO_LEFT  
  3.                 | SWT.NONE);  
  4.         // create a layout with spacing and margins appropriate for the font  
  5.         // size.  
  6.         GridLayout layout = new GridLayout();  
  7.         layout.makeColumnsEqualWidth = true;  
  8.         layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);  
  9.         layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);  
  10.         layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);  
  11.         layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);  
  12.         layout.marginLeft = 10;  
  13.         composite.setLayout(layout);  
  14.         GridData data = new GridData(SWT.FILL, SWT.TOP, falsefalse);  
  15.         composite.setLayoutData(data);  
  16.         composite.setFont(parent.getFont());  
  17.   
  18.         // Add the buttons to the button bar.  
  19.         createButtonsForButtonBar(composite);  
  20.         composite.setBackgroundImage(backgroundBtmImage);  
  21.         return composite;  
  22.     }  


在上面的代码中,偶除了对偶所提到的地方进行了修改以外,还加上鸟一行: layout.marginLeft  =   10 ;

介个素因为如果右边距过小滴话,背景图片就会被覆盖掉一些,而因为偶们用到鸟
SWT.RIGHT_TO_LEFT,所以应当设置marginLeft滴值 :-)

还有一点素8能忘记滴,就素要重写一下setButtonLayoutData(Button button)方法,因为偶们要把Button改成居右对齐:


 
  1. protected void setButtonLayoutData(Button button) {  
  2.     GridData data = new GridData(SWT.RIGHT, SWT.CENTER, falsefalse);  
  3.     int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);  
  4.     Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);  
  5.     data.widthHint = Math.max(widthHint, minSize.x);  
  6.     button.setLayoutData(data);  
  7. }  


然后再在createButtonsForButtonBar()方法中,把创建按钮的顺序改变一下,偶们就可以看到最开始滴那张美丽滴对话框鸟~~~虽然被偶涂改滴有些不美丽鸟~~~

现在还有个小小滴问题就素按钮距离底端滴黑框太近鸟~~介个素因为,介个Composite只有一行,所以要改变按钮距离底端滴距离,那么DialogArea滴大小就要跟着改变,而现在偶们滴DialogArea所需要滴背景图片还米改好,于是只有这样鸟~~~大家应该知道在哪里设置底边的边距吧?就素createButtonBar方法中滴那个layout.marginHeight =xxx :)

最后别忘了,整个对话框的高度,应该是Window Title Bar,Content Area和Button Bar三部分滴和。

偶已经说完鸟,如果觉得偶滴介篇文章对你有些帮助的朋友,请去支持一下偶们美丽可爱滴靓颖同学滴新专辑The One吧:)多谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eclipse RCP是一种用于开发桌面应用程序的框架。它提供了一套丰富的工具和API,使开发者能够轻松地构建功能强大的跨平台应用程序。在使用Eclipse RCP进行开发时,可以使用Active X控件、2D绘图和向OpenGL进军等技术来增强应用程序的功能和用户体验。\[1\] 在Eclipse RCP中,可以通过重写WorkbenchAdvisor和WorkbenchWindowAdvisor类中的勾子函数来自定义应用程序的启动过程。默认情况下,Eclipse RCP项目已经提供了ApplicationWorkbenchAdvisor和ApplicationWorkbenchWindowAdvisor类的实现,可以在这些类中进行定制化的操作。\[2\] 例如,在ApplicationWorkbenchAdvisor类中重写postStartup方法,可以在应用程序启动后执行一些初始化操作。可以在该方法中调用自定义的方法来初始化项目资源,如创建新的项目。\[3\] 总之,Eclipse RCP提供了丰富的功能和灵活的扩展性,使开发者能够根据自己的需求定制和开发强大的桌面应用程序。 #### 引用[.reference_title] - *1* [Eclipse RCP 开发系列入门教程](https://blog.csdn.net/wsh_0703/article/details/80580218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Eclipse插件(RCP)初始化资源文件](https://blog.csdn.net/m0_47406832/article/details/124055334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值