如何在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_DRAWITEM
, WM_MEASUREITEM
, WM_INITMENUPOPUP
, WM_MENUSELECT
和WM_COMMAND
并通过HandleMenuMsg
将它们转发到IContextMenu2
实例。