Собственные сочетания клавиш Java Swing L & F - PullRequest
2 голосов
/ 13 августа 2011

Как использовать стандартные сочетания клавиш операционной системы в приложении Java Swing?Я вижу, как добавить javax.swing.JToolbar или строку меню в мое приложение, но оно не связано с де-факто стандартными сочетаниями клавиш (например, Ctrl + S для сохранения).

Ответы [ 4 ]

3 голосов
/ 30 ноября 2012

Основываясь на ответах других людей, я решил поделиться тем, что я сделал, в своем собственном приложении ...

Во-первых, у меня есть переменная класса, которая объявлена ​​и инициализирована следующим образом:

private static int keyMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

Далее, в том же классе, у меня есть этот метод:

private static void addNewMenuItem(JMenu rootMenu, String itemName,
        int itemMnemonic, ActionListener itemActionListener) {
    JMenuItem menuItem = new JMenuItem(itemName, itemMnemonic);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(itemMnemonic, keyMask)); // <-- Where I use keyMask.
    menuItem.addActionListener(itemActionListener);
    rootMenu.add(menuItem);
}

Теперь все, что мне нужно сделать, чтобы создать новое меню, написать что-то вроде:

addNewMenuItem(fileMenu, "Save...", KeyEvent.VK_S, saveListener);

Как вы можете себе представить, это действительно удобный метод для очистки кода, когда я настраиваю меню с десятками элементов! Я надеюсь, что это помогает кому-то. (Я не пошел по пути действия, потому что это потребовало бы от меня создания нового класса для каждого действия ... это казалось раздражающим ограничением, чтобы обойти. Я почти уверен, что этот код короче, чем этот код будет.)

3 голосов
/ 13 августа 2011

Вы можете использовать Toolkit.getDefaultToolkit.getMenuShortcutKeyMask(), чтобы получить правильный ключ модификатора для каждой платформы ( Ctrl , Command и т. Д.), Но я неосознавая любой способ выяснить, что такое «стандартные» ярлыки для действия, не определяя их самостоятельно.

Что-то, что немного больше, чем родной, как SWT, может быть лучше в такого родавещь, хотя.

2 голосов
/ 13 августа 2011

Прочтите учебник по Swing на Как использовать действия .

Действие - это, по сути, ActionListener с еще несколькими свойствами. Вы можете определить текст, мнемонику и ускорители для действия. Затем вы можете использовать то же действие для создания JButton, который вы добавляете на панель инструментов, или JMenuItem, который вы добавляете в меню.

1 голос
/ 13 августа 2011

Вы должны вручную связать вашу комбинацию клавиш с нужным пунктом меню.Например, используя метод setAccelerator () в JMenuItem.

...