简体   繁体   中英

How can I use the system's context menu for files in a Java application?

I want to display results of a file search. I want to enable a context menu for a file selection, which will be the system's context menu.

For example, if the user right-clicks a file in Windows - I want to display the popup-menu with the options:

  • Open
  • Open with...
  • Edit
  • Send to...
  • Copy
  • Cut
  • etc...

And, if possible - this menu will be generated automatically, depending on the operating system.

If that is not possible or too complex - I'd like to at least enable a "Locate on disk" option which will open a Windows Explorer (or its equivalent in other system) in the file's folder and select the file.

The application is written in Java (JDK 7) using SWT.

Take a look at the example of how to use a popup menu:

Snippet131

Once you are in the handleEvent() method you can perform any logic you need in order to add menu items to your context menu.

In order to get platform specific behavior you can use System.getProperty() with a combination of the "os.name", "os.arch", and "os.version" strings in order to determine which platform you are running. Then just use if statements to conditionally add menu items to your menu.

For Windows you can achieve this but you have to call some native COM methods. I did it with native calls, maybe it is possible with JNA. You need the functionality from IContextMenu2 .

Then you can extend the SWT Menu class, populate it with QueryContextMenu() , subclass it and handle WM_DRAWITEM , WM_MEASUREITEM , WM_INITMENUPOPUP , WM_MENUSELECT and WM_COMMAND and forward them to IContextMenu2 instance via HandleMenuMsg .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM