我正在开发一个简单的 Eclipse 插件。我添加了一个弹出窗口作为扩展,并为其分配了一个 Action 类。除了在打开弹出窗口时第一次禁用该操作之外,一切正常。
我检查是否可以在selectionChanged方法中执行该操作。但在构造 MyAction 对象之前不能调用它。它仅在单击菜单按钮后执行(如果未满足先决条件,则应禁用它)。
遇到这样的问题怎么处理?在打开弹出窗口之前如何构造MyAction?
我在我的项目中附上了基本代码的示例(plugin.xml、MyAction.java):
<plugin>
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
id="action.contribution1"
objectClass="myobject">
<menu
id="action.menu1"
label="Menu"
path="additions">
</menu>
<actionm
class="action.popup.actions.MyAction"
enablesFor="1"
id="action.newAction"
label="Play"
menubarPath="action.menu1">
</action>
</objectContribution>
</extension>
</plugin>
public class MyAction implements IObjectActionDelegate {
public MyAction() {
super();
}
public void setActivePart(IAction action, IWorkbenchPart targetPart) {}
public void run(IAction action) {
//some logic
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
boolean enabled = false;
//some logic concerning enabled variable
action.setEnabled(enabled);
}
}
最佳答案
setActivePart
应该在菜单显示之前调用。您可以在其中设置操作启用。
您可以使用 <enablement>
指定操作的初始启用plugin.xml
中的元素,例如:
<action
class="action.popup.actions.MyAction"
enablesFor="1"
id="action.newAction"
label="Play"
menubarPath="action.menu1">
<enablement>
<with variable="selection">
... tests
</with>
</enablement>
</action>
通过测试当前选择来设置启用。
注意:扩展点org.eclipse.ui.popupMenus
现已弃用,您应该移至 org.eclipse.ui.menus
扩展点。
关于java - Eclipse 插件弹出窗口的操作初始可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745543/