跳转到路径导航栏
跳转到正文内容

用Java SWT实现MSN风格下拉框

http://www.sina.com.cn  2008年12月31日 10:57  比特网ChinaByte

  SWT一个所谓的优点是它的本地化外观,因为它是通过JNI调用操作系统的组件,从而可以保证外观上适合大多数用户的需求,但是一些IM类软件商往往希望它们的产品有着一套独特的外观,这对SWT这种原生组件来说就有些力不从心了,严格来说如果你的用户对外观要求比较苛刻,那么Swing是首选,因为L&F机制可以确保你做到这一点,另外Swing还有着许多SWT不具备的优点,例如半透明组件、渲染等,但是少数的这些特性用SWT还是可以模拟的,本文就向大家介绍如何通过自定义组件实现MSN风格的下拉框。

  通常来说,SWT提供的组件集基本上能满足大多数用户的需求,而自定义组件通常分为2种,一种是将若干基本组件组合成一个复合组件(如日历组件);第二是对现有组件改善外观从而符合客户的要求;或者将这两种混合使用。利用SWT实现自定义组件通常要继承Composite或Canvas来实现,但是绝大多数采用继承Composite实现,如果你查看SWT的源代码,你会发现很多SWT高级组件(如ExpandBar)都是直接继承Composite来实现的。

  如果要模拟MSN的用户名输入组件,你需要采集一些数据,分别是:正常、禁用两种状态下边框的颜色;正常、禁用两种状态下的背景色;右边下拉按钮的图标。现在将这几组数据给出。

  正常状态下边框的颜色:RGB 170,183,199

  禁用状态下边框的颜色:RGB 208,215,229

  正常状态下的背景色:RGB 254, 254, 254

  禁用状态下的背景色:RGB 238, 241, 249

  下拉按钮的图标:

  接下来创建一个类叫做ComboSelector继承自Composite。需要指出的是,这个自定义组件SWT组件库支持,在Eclipse下如果有VE、swt-designer这样的插件可以借助向导将必要的库导入到工程的classpath下,此外如果部署SWT应用程序还需要一个动态库,关于如何部署本文不作阐述。

  创建以上这些数据常量

  private final Color ENABLED_LINE_COLOR = new Color(Display.getCurrent(), 170, 183, 199);

  private final Color DISABLED_LINE_COLOR = new Color(Display.getCurrent(), 208, 215, 229);

  private final Color ENABLED_BG = new Color(Display.getCurrent(), 254, 254, 254);

  private final Color DISABLED_BG = new Color(Display.getCurrent(), 238, 241, 249);

  private final Image COMBO_ICON = new Image(Display.getDefault(), "combo.png");

  另外你还需要一个基本文本组件用于输入、一个菜单显示保存的数据。

  private Text inputText;

  private Menu selectorMenu;

上一页 1 2 3 4 5 6 7 8 下一页

>话题讨论查看全部评论

已有 _COUNT_位网友发表评论  
登录名: 密码: 匿名发表

Powered By Google
flash

新浪简介About Sina广告服务联系我们招聘信息网站律师SINA English会员注册产品答疑┊Copyright © 1996-2009 SINA Corporation, All Rights Reserved

新浪公司 版权所有