我会排队获取菜单中所选菜单项的参考。我怎样才能做到这一点?
这是一个负责执行由@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;
}
}
}
}
}
我希望有人帮助我知道正确的方法。