我会排队获取菜单中所选菜单项的参考。我怎么能这样做?
这是一个类的示例,它负责执行标记为 @Execute 的注释方法。
这是错误的方式:
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import com.lwm.app.parts.GuiContainer;
public final class MenuItemSelectionExecution {
@SuppressWarnings("rawtypes")
private MElementContainer menu = null;
@Inject
private MWindow window;
@CanExecute
public boolean canExecute() {
if (null == menu) {
setMenu();
}
if (null == menu) {
return false;
}
return true;
}
@Execute
public void execute(MApplication app) {
MWindow selectedElement = app.getSelectedElement();
System.out.println(selectedElement);
MUIElement selectedElement2 = menu.getSelectedElement();
//selectedElement2 = null
}
@SuppressWarnings("rawtypes")
private void setMenu() {
final MMenu mainMenu = window.getMainMenu();
final List<MMenuElement> mainMenuItems = mainMenu.getChildren();
final Iterator<MMenuElement> iterator = mainMenuItems.iterator();
MMenuElement currentMainMenuItem = null;
String label = null;
MElementContainer menu = null;
while (iterator.hasNext()) {
currentMainMenuItem = iterator.next();
label = currentMainMenuItem.getLabel();
if (currentMainMenuItem instanceof MElementContainer) {
menu = (MElementContainer) currentMainMenuItem;
if (GuiContainer.PROGRAMS.equals(label)) {
this.menu = menu;
break;
}
}
}
}
}
我希望有人帮助我了解正确的方法。
答案 0 :(得分:1)
您应该只能在方法上注入MMenuItem
:
@CanExecute
public boolean canExecute(@Optional MMenuItem menuItem);
如果未从菜单调用处理程序,@Optional
将表示调用仍然有效,菜单项将为null
。