麻烦决定如何使用动作ObjectContributions或命令处理程序将弹出菜单添加到eclipse插件

时间:2012-12-13 09:31:14

标签: eclipse plugins command action

问题在于:我在网上看到的大多数内容都说我们应该在创建弹出菜单时避免操作,因为命令框架允许更多的解耦。

示例: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文件编辑器时显示弹出窗口。

此致

1 个答案:

答案 0 :(得分:2)

最后它非常直接。以下示例使用命令框架。它没有处理程序,因此只要在需要生成类时单击类超链接。

创建一个名为com.test.plugin.project的新eclipse插件项目

在plugin.xml文件的dependency选项卡中添加以下依赖项

  • org.eclipse.jdt
  • org.eclipse.jdt.core
  • org.eclipse.jdt.ui
  • org.eclipse.jface.text

将它放在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>

这是做什么

  • 当你右键单击包浏览器内的java文件时,它会在子菜单中创建一个弹出菜单(并且只有当你点击一个java文件时)。
  • 当您右键单击java文件时,它会在子菜单中创建一个不同的弹出菜单。