如何在Java应用程序中使用系统的上下文菜单?

我想显示文件搜索的结果。 我想为文件选择启用上下文菜单,这将是系统的上下文菜单。

例如,如果用户右键单击Windows中的文件 – 我想显示带有选项的弹出菜单:

  • 打开
  • 打开用…
  • 编辑
  • 发送至…
  • 复制
  • 等等…

并且,如果可能 – 将根据操作系统自动生成此菜单。

如果这不可能或太复杂 – 我想至少启用“磁盘上的定位”选项,该选项将在文件的文件夹中打开Windows资源管理器(或其他系统中的等效项),然后选择该文件。

该应用程序使用SWT以Java(JDK 7)编写。

看一下如何使用弹出菜单的示例:

Snippet131

进入handleEvent()方法后,您可以执行所需的任何逻辑,以便将菜单项添加到上下文菜单中。

为了获得特定于平台的行为,您可以将System.getProperty()与“os.name”,“os.arch”和“os.version”字符串结合使用,以确定您正在运行的平台。 然后使用if语句有条件地将菜单项添加到菜单中。

对于Windows,您可以实现此目的,但您必须调用一些本机COM方法。 我使用本机调用来完成它,也许可以使用JNA。 您需要IContextMenu2的function。

然后,您可以扩展SWT Menu类,使用QueryContextMenu()填充它,将其子类化并处理WM_DRAWITEMWM_MEASUREITEMWM_INITMENUPOPUPWM_MENUSELECTWM_COMMAND并通过HandleMenuMsg将它们转发到IContextMenu2实例。