快速业务通道

用Java SWT实现MSN风格的下拉框 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
制监听器,那么redraw会依次调用每个监听器的paintControl方法,这与swing的事件机制是相同的。在redraw方法中根据isEnabled()的值决定边框的颜色,所以每当setEnable方法被调用都应该执行重绘。

还需要指出,通过添加绘制监听器来实现个性化的外观,并在调用影响外观的操作(比如setEnable)时调用redraw方法强制组件重绘,这是自定义组件常用的实现手段。你会看到接下来的很多方法会经常调用redraw通知组件重绘。

除了setEnabled方法,还有一些方法需要补充,一并列出:

public void setEditable(boolean editable) { inputText.setEditable(editable); } public String getText() { return inputText.getText(); } public void setText(String text) { inputText.setText(text); } public void setTextLimit(int limit) { inputText.setTextLimit(limit); }

这些方法简单易懂,不作解释,以上列举的只是最基本的方法,如果觉得功能不够还可以定义其他方法,例如可以对用户的输入作验证。

接下来回到构造函数中来,QQ、MSN等一些软件的登录除了点击登录按钮执行还可以在用户名、口令输入框上单击回车来实现,为了实现这一功能,需要为基本文本组件添加一个选择监听器。

inputText.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected(SelectionEvent e) { commit(); } });

这样,当用户在文本组件上单击回车,会执行commit方法。下面是commit方法的定义:

protected void commit() {};

它不作任何事情,因为组件不知道实际会应用在何种场合,即回车操作具体作什么,这应该通过继承该组件重写commit方法实现具体功能。

然后为组件添加鼠标监听器,实现用户单击下拉按钮时菜单的弹出。完整代码如下:

addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { if (e.x > getBounds().width - COMBO_ICON.getBounds().width - 15 && e.x < getBounds().width && e.y > 0 && e.y < getBounds().height) { selectorMenu.setLocation(getScreemLocation().x + 3, getScreemLocation().y + getSize().y + 23); selectorMenu.setVisible(true); } } });

用Java SWT实现MSN风格的下拉框(4)

时间:2011-01-19

if条件句子是判断鼠标指针的落点是否位于下拉三角的区域内,计算方法读者可以自己思考,之后设置弹出菜单出现的位置,根据前面定义的getScreemLocation方法可方便得出,需要提出的是计算x坐标的“+3”和y坐标的“+23”,为什么要再加上这个整数呢?是因为Windows窗口的标题栏高20像素,而getScreemLocation是无法自动计算出的,有些窗口可通过设置将标题栏去掉(SWT的Shell通过指定SWT.NO_TRIM样式实现)“+3是使菜单弹出的位置不至于遮挡组件边框线,因此偏移3像素为最佳位置”。调用setVisible显示菜单,不过前提条件是必须添加了菜单项。构造函数最后是一步是设置组件为可用,虽然任何SWT/Swing组件在构造时默认都是可用的,但是正如前面所述,重写setEnabled并不止设置是否被禁用,重要的是组件在两态下的外观,所以在构造函数最后添加setEnabled(true);

以上讲述过多的是如何装饰组件的外观,接下来的重点将介绍如何用该组件缓存数据,使用MSN时候会发现,单击登录用户名的下拉按钮时候,会弹出所有在本机登录过的用户名列表(如果保存的话),下面讲述如何实现这一功能。

我们的数据均保存在Vector这个集合中,由于实际应用变化万千,组件不可能知道实际保存何种类型的数据,因此Vector的元素类型统一设置为Object,这也实在是一个不错的设计,因为它不强制使用者去

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号