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

时间:2010-07-14 14:18:39

标签: java operating-system swt contextmenu

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

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

  • 打开
  • 打开...
  • 修改
  • 发送给...
  • 复制
  • 剪切
  • 等...

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

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

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

2 个答案:

答案 0 :(得分:1)

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

Snippet131

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

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

答案 1 :(得分:0)

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

然后,您可以扩展SWT Menu类,使用QueryContextMenu()填充它,将其子类化并处理WM_DRAWITEMWM_MEASUREITEMWM_INITMENUPOPUP,{{1 }和WM_MENUSELECT并通过WM_COMMAND将它们转发给IContextMenu2个实例。