公司项目做Eclipse 插件开发,需要添加右键菜单,其中找到了三种方法暂时归纳如下:
第一种:注册配置文件
第二种:注册ActionGroup
TableEditActionGroup actionGroup = new TableEditActionGroup(v,
columnList, delColumns);
actionGroup.fillContextMenu(new MenuManager());
// 生成菜单Menu
public void fillContextMenu(IMenuManager mgr) {
// 加入两个Action对象到菜单管理器
MenuManager menuManager = (MenuManager) mgr;
// 生成Menu并挂在表格table上。menu和table两个对象互为对方的参数
mgr.add(new OpenAction());
Grid grid = tv.getGrid();
Menu menu = menuManager.createContextMenu(grid);
grid.setMenu(menu);
}
private class OpenAction extends Action{
public OpenAction(){
setText("打开");
}
@Override
public void run() {
System.out.println("打开");
}
}
第三种方法: 直接添加鼠标事件
v.getGrid().addMouseListener(new CreateColumnListener(columnList, v));
public void mouseDown(MouseEvent e) {
// GridItem[] ((Grid)e.getSource()).getItemCount()
//鼠标左击事件
if(e.button==1){
}
}else if (e.button==3) {
//鼠标右击事件
final GridItem[] selectItems = v.getGrid().getSelection();
Menu menu = new Menu(v.getGrid());
MenuItem copyItem = new MenuItem(menu, SWT.PUSH);
copyItem.setText(“复制”);
MenuItem pasteItem = new MenuItem(menu, SWT.PUSH);
pasteItem.setText(“粘贴”);
v.getGrid().setMenu(menu);
//判断是否选中数据 未选中则菜单不可用
if (selectItems.length > 0) {
copyItem.setEnabled(true);
copyItem.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
clipboard.setContents(selectItems);
}
});
//判断粘贴板是否存在数据 存在 粘贴可用 否则 不可用
if(clipboard.getContents()!=null){
pasteItem.setEnabled(true);
pasteItem.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
GridItem[] selectItems1 = (GridItem[]) clipboard
.getContents();
List<ColumnModel> copys = ColumnDataFactory
.createCopyModel(v, selectItems1);
for (int i = 0; i < copys.size(); i++) {
columnList.add(copys.get(i));
v.add(copys.get(i));
}
v.getControl().getShell().layout();
}
});
}else {
pasteItem.setEnabled(false);
}
}else {
copyItem.setEnabled(false);
pasteItem.setEnabled(false);
}
}
}