Как сделать Java TrayIcon MenuItem сокращенным?

#java #shortcut #menuitem

#java #ярлык #menuitem

Вопрос:

Мне трудно создать ярлык во всплывающем меню TrayIcon.

Ниже приведены мои коды.

 final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(createImage("images/bulb.gif", "tray icon"));
final SystemTray tray = SystemTray.getSystemTray();

//MenuItem aboutItem = new MenuItem("About", new MenuShortcut(KeyEvent.VK_A));
MenuItem aboutItem = new MenuItem("About", new MenuShortcut(KeyEvent.VK_A, false));
Menu settingMenu = new Menu("Settings"); 
MenuItem exitItem = new MenuItem("Exit");

popup.add(aboutItem);
popup.addSeparator();
popup.add(settingMenu);
popup.addSeparator();
popup.add(exitItem);

aboutItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "This dialog box is run from the About menu item");
            }
        });
  

Я застрял в этом пункте.
Почему моя программа не работает, когда я нажимаю клавишу «a»?
Как я могу сделать это правильно?
и я хочу указать клавишу сокращения is во всплывающем меню, например, подчеркнуть нижний символ «a».

Комментарии:

1. Не могли бы вы, пожалуйста, правильно отформатировать исходный код?

Ответ №1:

Вот правильный и исправленный код с клавиатурой и keyAccelerator, который поместит строку под

   //Check the SystemTray support
        if (!SystemTray.isSupported()) {
            System.out.println("SystemTray is not supported");
            return;
        }
        final PopupMenu popup = new PopupMenu();
        final TrayIcon trayIcon =
                new TrayIcon(createImage("images/bulb.gif", "tray icon"));
        final SystemTray tray = SystemTray.getSystemTray();

        // Create a popup menu components
        MenuItem aboutItem = new MenuItem("About");
        // Here is the change
        aboutItem.setMnemonic(KeyEvent.VK_A); 
        aboutItem .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
            0));

        // end change
        CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
        CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
        Menu displayMenu = new Menu("Display");
        MenuItem errorItem = new MenuItem("Error");
        MenuItem warningItem = new MenuItem("Warning");
        MenuItem infoItem = new MenuItem("Info");
        MenuItem noneItem = new MenuItem("None");
        MenuItem exitItem = new MenuItem("Exit");

        //Add components to popup menu
        popup.add(aboutItem);
        popup.addSeparator();
        popup.add(cb1);
        popup.add(cb2);
        popup.addSeparator();
        popup.add(displayMenu);
        displayMenu.add(errorItem);
        displayMenu.add(warningItem);
        displayMenu.add(infoItem);
        displayMenu.add(noneItem);
        popup.add(exitItem);

        trayIcon.setPopupMenu(popup);

        try {
            tray.add(trayIcon);
        } catch (AWTException e) {
            System.out.println("TrayIcon could not be added.");
            return;
        }
  

Надеюсь, это поможет..

Комментарии:

1. setMnemonic и setAccelerator не являются методами MenuItem в Java 6.

Ответ №2:

например http://www.javaswing.org/java-swing-popup-menu.aspx

 private void showPopup(MouseEvent e) {