1

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

示例:http ://wiki.eclipse.org/FAQ_What_is_the_difference_between_a_command_and_an_action%3F

很公平。

但是当我在编辑器中右键单击 .java 文件时,并且只有在我在编辑器中单击时,我才有时间让命令框架添加我的菜单。我可以显示菜单(使用'with'和activeEditor变量),但是当我右键单击包资源管理器中的java文件时它也会显示,这是我不想要的。我怀疑这是因为文件已经在编辑器中打开了。

当我使用 IComplilationUnit 右键单击​​包资源管理器中的 java 文件时,我还添加了一个菜单。这很好用。

因此,当我在文件内单击时,使用弹出菜单操作解决了我的问题。我还可以访问那里的所有 ISelection 内容。但是耦合度太高了,我失去了使用处理程序的灵活性。

我正在寻找: 告诉我我正在这样做,这是唯一可能的方式;或告诉我如何让我的弹出窗口仅在我右键单击 java 文件编辑器时出现。

问候

4

1 回答 1

2

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

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

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

  • 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 文件时,它会在子菜单中创建不同的弹出菜单。
于 2012-12-14T10:43:19.187 回答