我想在我的视图中添加一个菜单操作,就像从Eclipse控制台中添加的那样:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9LMnhUei5wbmcifQ==” alt =“在此处输入图像描述”>
我设法做了非常相似的事情。从菜单上我要执行的两个操作中,有一个与MenuCreator相关联,但是以这种方式进行操作会将此操作设置为最上面的一个,换句话说,一个带有箭头的菜单,然后单击它而不是打开菜单,而是从该操作的run方法中启动代码。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS91OEtkYS5wbmcifQ==” alt =“在此处输入图像描述”>
我想要控制台操作的确切行为,我希望菜单上的2个操作和顶部的小图标打开此菜单。如何执行此操作?
到目前为止的代码:
private void createToolBar() {
IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
actionNovaDespesa = new OpenNewDespesa();
actionNovaDespesa.setMenuCreator(new CustomActionMenu());
toolBar.add(actionNovaDespesa);
}
public class CustomActionMenu implements IMenuCreator {
private Menu menu;
public Menu getMenu(Control parent) {
menu = new Menu(parent);
MenuItem menuItemColaboradores = new MenuItem(menu, SWT.PUSH);
menuItemColaboradores.setText(LabelVARS.DESPESA_COLABORADOR);
menuItemColaboradores.setImage(Activator.getImageDescriptor(IconVARS.TOOLBAR_UTILIZADOR).createImage());
menuItemColaboradores.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
new OpenNewDespesaColaborador().run();
}
});
return menu;
}
public void dispose() {
if(menu != null) {
menu.dispose();
menu = null;
}
}
public Menu getMenu(Menu parent) {
return null;
}
}
您需要使菜单实现IAction
和IMenuCreator
。类似于:
class DropDownAction extends Action implements IMenuCreator
{
private Menu menu;
DropDownAction()
{
super("Name", IAction.AS_DROP_DOWN_MENU);
setImageDescriptor(... image descriptor for button);
setMenuCreator(this);
}
@Override
public void dispose()
{
if (menu != null) {
menu.dispose();
menu = null;
}
}
@Override
public void runWithEvent(final Event event)
{
if (event.widget instanceof ToolItem)
{
final ToolItem toolItem = (ToolItem)event.widget;
final Control control = toolItem.getParent();
final Menu menu = getMenu(control);
final Rectangle bounds = toolItem.getBounds();
final Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
menu.setLocation(control.toDisplay(topLeft));
menu.setVisible(true);
}
}
@Override
public Menu getMenu(final Control parent)
{
if (menu != null) {
menu.dispose();
}
menu = new Menu(parent);
// TODO add your menu items
return menu;
}
@Override
public Menu getMenu(final Menu parent)
{
return null;
}
}