Как получить ускоритель меню со знаками плюс или минус в Swing? - PullRequest
3 голосов
/ 01 октября 2011

Я попытался настроить ускоритель JMenuItem, используя следующее:

item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

Пункт меню показывает ярлык ⌘+ (на Mac), но нажатие этих двух клавиш не вызовет его. У меня такая же проблема со знаком минус -.

Можно ли как-нибудь использовать пункт меню с любым из этих знаков в качестве ярлыка?

РЕДАКТИРОВАТЬ - Вот SSCCE:

public class MenuWithPlus {
    public static void main(String[] args) {
        JFrame frame = new JFrame();

        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("View");
        JMenuItem item = new JMenuItem("Zoom in");
        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
        item.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("ZOOM IN TRIGGERED");
            }
        });
        menu.add(item);
        bar.add(menu);
        frame.setJMenuBar(bar);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

В коде акселератора вы должны изменить на:

item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, Event.CTRL_MASK));

Тест, который я сделал, - добавление слушателя ключевого события на фрейм и перехват ключа для плюса (в данном случае ADD).

frame.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyCode());
    }
    });
1 голос
/ 10 октября 2011

Используете ли вы клавиши + / - на главной клавиатуре против цифровой клавиатуры? Они рассматриваются как отдельные ключи, поэтому убедитесь, что вы используете их последовательно.

Я думаю, VK_PLUS не используется для обычной клавиши «плюс» ( Shift - = на клавиатуре США), а скорее для цифровой клавиатуры + или + на некоторых немецких клавиатурах. Предполагая, что у вас есть клавиатура США, вы можете захотеть Shift вместе с VK_EQUALS.

См. эту старую ошибку и это обсуждение .

...