这个问题困扰了好久了,这次做出来其实也是参考了网上的一段代码。
其实也不难,就是两个组件:Button和Menu,然后给Button添加一个监听器,点击Button的时候弹出Menu。
说到这里问题来了,怎么弹出Menu?
我的处理方式是:
1.在监听器类里面new一个Menu,然后添加各个MenuItem子项
2.在点击按钮时获取按钮相对于父控件的的位置
这里涉及到两个方法:getBounds();//获取按钮区域
toDisplay(Point p);//获取用来定位之前所获取的相对坐标的点
3.在特定区域显示Menu
监听器的代码如下:
/**
* 点击按钮弹出下拉菜单的监听器
* @author Michael
*
*/
class DropdownListener extends SelectionAdapter{
private Button dropdown;
private Menu menu;
public DropdownListener(Button dropdown) {
this.dropdown = dropdown;
menu = new Menu(dropdown.getParent().getShell());
}
public void add(String item) {
MenuItem menuItem = new MenuItem(menu, SWT.NONE);
menuItem.setText(item);
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// 选中子项的处理方法
MenuItem item = (MenuItem) event.widget;
}
});
}
public void widgetSelected(SelectionEvent event) {
// Determine where to put the dropdown list
Button btn = (Button) event.widget;
Rectangle rect = btn.getBounds();
Point pt = btn.getParent().toDisplay(new Point(rect.x, rect.y));
menu.setLocation(pt.x, pt.y + rect.height);
menu.setVisible(true);
}
}
然后给按钮添加该监听器。
用法如下:
Button actionButton = new Button(composite, SWT.PUSH); actionButton.setText("Actions "); DropdownListener actListener = new DropdownListener(actionButton); actListener.add("item1");
actionButton.addSelectionListener(actListener);actListener.add("item2");