我想在我的视图中添加一个菜单操作,就像Eclipse控制台中的那个:
我设法做了一些非常相似的事情。从菜单中我想要的两个动作中,其中一个动作关联了MenuCreator,但这样做会将此动作设置为最重要的动作,换句话说,用箭头打开菜单的那个,当我点击它时,不是打开菜单,而是从动作中启动run方法中的代码。
我想要从控制台操作中获得exctly行为,我希望菜单上的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;
}
}
答案 0 :(得分:1)
您需要制作菜单工具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;
}
}