问题在于:我在网上看到的大多数内容都说我们应该在创建弹出菜单时避免操作,因为命令框架允许更多的解耦。
示例:http://wiki.eclipse.org/FAQ_What_is_the_difference_between_a_command_and_an_action%3F
足够公平。
但是,当我右键单击编辑器中的.java文件时,我正忙着让命令框架添加我的菜单,并且只有当我在编辑器中单击时才会这样。我可以显示菜单(使用'with'和activeEditor变量),但是当我右键单击package explorer中的java文件时,它也会显示,这是我不想要的。我怀疑是因为文件已经在编辑器中打开了。
当我使用IComplilationUnit右键单击包浏览器内的java文件时,我还会添加一个菜单。这很好。
因此,当我在文件中单击时,使用弹出菜单操作解决了我的问题。我也可以访问那里的所有ISelection东西。但耦合很高,我失去了使用处理程序的灵活性。
我正在寻找: 告诉我,我正在尽可能地做到这一点;要么 告诉我如何在我右键单击java文件编辑器时显示弹出窗口。
此致
答案 0 :(得分:2)
最后它非常直接。以下示例使用命令框架。它没有处理程序,因此只要在需要生成类时单击类超链接。
创建一个名为com.test.plugin.project的新eclipse插件项目
在plugin.xml文件的dependency选项卡中添加以下依赖项
将它放在plugin.xml选项卡部分:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="true"
locationURI="popup:org.eclipse.ui.popup.any">
<menu
label="Test Project Sub Menu">
<command
commandId="com.test.plugin.project.command.packageexplorer"
id="packageexplorerId"
style="push">
<visibleWhen
checkEnabled="false">
<iterate
ifEmpty="false"
operator="or">
<instanceof
value="org.eclipse.jdt.internal.core.CompilationUnit">
</instanceof>
</iterate>
</visibleWhen>
</command>
<command
commandId="com.test.plugin.project.command.classfile"
id="classfileId"
style="push">
<visibleWhen
checkEnabled="false">
<iterate
ifEmpty="false"
operator="or">
<and>
<with
variable="selection">
<instanceof
value="org.eclipse.jface.text.TextSelection">
</instanceof>
</with>
<with
variable="activeEditorId">
<equals
value="org.eclipse.jdt.ui.CompilationUnitEditor">
</equals>
</with>
</and>
</iterate>
</visibleWhen>
</command>
</menu>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.commands">
<command
id="com.test.plugin.project.command.packageexplorer"
name="Only Show In Package Explorer">
</command>
<command
id="com.test.plugin.project.command.classfile"
name="Only Show In Class File">
</command>
</extension>
</plugin>
这是做什么