快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
实现某某接口,或基类,假如设计成Vector中的元素必须是实现某一特定接口IElement,

private Vector dataSet = new Vector();

这样的话,使用者就必须将其POJO作更改,以适应于此组件,而Object作为所有类的基类,因此可容纳任何类型的数据。接下来的一步很重要,是将数据与菜单关联起来。定义如下方法public void loadMenuItems(Object[] objects),顾名思义是一次性读取一组元素,完整的代码如下:

public void loadMenuItems(Object[] objects) { dataSet.clear(); MenuItem[] items = selectorMenu.getItems(); for (MenuItem item : items) { item.removeSelectionListener(this); item.dispose(); } for (int i = 0; i < objects.length; i++) { dataSet.add(objects[i]); MenuItem item = new MenuItem(selectorMenu, SWT.PUSH); item.setText(objects[i].toString()); item.setData(objects[i]); item.addSelectionListener(this); } }

因为是load所有数据,所以第一步是将已有的数据清空,包括Vector中的数据和菜单中的菜单项。然后是对传入的Object数组作遍历,对于每一项,将之添加进集合然后创建一个菜单项,下一步item.setText(objects[i].toString()); 是设置菜单项的文字,toString()方法是Object的固有方法,但是实际应用时必须重写该方法的实现。接下来是item.setData(objects[i]); 为菜单项设置数据,这一步非常重要,SWT的每一个组件都具有public void setData (Object data)和public Object getData ()方法。还有Hash结构的public void setData (String key, Object value)和public Object getData (String key)。稍后会看到通过item.getData(); 取出创建时存入的数据。最后一行是为菜单项添加事件监听器,并使组件本身作为监听器,使组件本身实现SelectionListener接口,然后添加下面两个方法:

public final void widgetDefaultSelected(SelectionEvent e) public final void widgetSelected(SelectionEvent e)

其中widgetDefaultSelected在单击回车时触发,对文本框这样的组件适用,widgetSelected是鼠标单击时触发适用于按钮、菜单项。因此我们只处理widgetSelected。

public final void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem) e.getSource(); selectedItem = item.getData(); String text = item.getData().toString(); inputText.setText(text); inputText.setSelection(0, text.length()); selected(item.getData()); }

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

时间:2011-01-19

首先取得事件源即单击的菜单项,然后更新selectedItem引用指向这个菜单项保存的数据(先前通过setData方法添加的),接下来的代码不作解释,很容易理解。值得注意的是最后一行selected(item.getData()); 作用是当用户选中菜单某一项时,根据当前选择的那个数据自动执行相应的操作,selected方法定义如下:

protected void selected(Object object) {};

与commit方法一样,是需要根据实际情况自定义处理逻辑的。

最后添加如下2个方法:

public void select(int index) { MenuItem[] items = selectorMenu.getItems(); if (index < 0 || index >= items.length) { throw new ArrayIndexOutOfBoundsException( "the index value must between " + 0 + "and " + (items.length - 1)); } selectedItem = items[index].getData(); inputText.setText(items[index].getText()); }

select用来设置当前选择第几个项,getSelectedItem返回当前用户选择的数据。

到此为止,ComboSelector已经完成,可以作为API使用了,下面我们编写一个程序测试该组件。

首先编写一个P

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号