setMnemonic () и вызвать метод, нажав клавишу

1

Я должен запустить метод() вручную при нажатии клавиши (Alt + H).

if("The key pressed==(Alt+H)"){
    callMethod();
}

public void callMethod(){
    //Some codes here
}

Как я могу это сделать на Java. Пожалуйста, дайте мне простой способ сделать это.

Теги:
key
swing
pressed

3 ответа

4
Лучший ответ

Здесь стоит прочитать о учебнике Oracle - Включение работы с клавиатурой, где подробно объясняется вместе с образцом.

Узнайте больше о учебнике Oracle - Как использовать привязки клавиш

Пример из приведенного выше примера:

//Setting the mnemonic when constructing a menu item:
menuItem = new JMenuItem("A text-only menu item",
                     KeyEvent.VK_H);

//Setting the mnemonic after creation time:
menuItem.setMnemonic(KeyEvent.VK_H);

//Setting the accelerator:
menuItem.setAccelerator(KeyStroke.getKeyStroke(
    KeyEvent.VK_H, ActionEvent.ALT_MASK));

Подробнее здесь Учебное пособие Oracle - Как использовать кнопки, флажки и кнопки радиосвязи

Пример кода: (Alt-H щелкнул среднюю кнопку)

JButton b2 = new JButton("Middle button", middleButtonIcon);
b2.setMnemonic(KeyEvent.VK_H);
  • 1
    +1 ты меня побил :)
  • 0
    Спасибо мое удовольствие :)
1

Если вы используете меню, вы можете использовать setMnemonic(), см. Примеры использования меню для примеров. Другой вариант - использовать привязки клавиш. Например:

import java.awt.event.*;
import javax.swing.*;

public class TestKeys {
    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("Keys");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.ALT_MASK);

        Action testAction = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                 JOptionPane.showMessageDialog(frame, "Alt-H pressed");
            }
        };

        frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "TestAction");
        frame.getRootPane().getActionMap().put("TestAction", testAction);       

        JLabel label = new JLabel("Hit Alt-H");
        label.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        frame.add(label);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
0

Лучший метод - использовать setMnemonic(), потому что он самый простой.

проверьте эту статью для получения дополнительной информации http://www.herongyang.com/Swing/JMenuBar-Set-Keyboard-Mnemonics-on-Menu-Items.html

private JMenu getColorMenu() {
  JMenu myMenu = new JMenu("Color");
  ButtonGroup myGroup = new ButtonGroup();

  JRadioButtonMenuItem myItem = new JRadioButtonMenuItem("Red");
  myItem.setSelected(true);
  myItem.setMnemonic(KeyEvent.VK_R);
  myItem.addActionListener(this);
  myItem.addMenuKeyListener(this);
  myGroup.add(myItem);
  myMenu.add(myItem);

  myItem = new JRadioButtonMenuItem("Green");
  myItem.setMnemonic(KeyEvent.VK_G);
  myItem.addActionListener(this);
  myItem.addMenuKeyListener(this);
  myGroup.add(myItem);
  myMenu.add(myItem);

  myItem = new JRadioButtonMenuItem("Blue");
  myItem.setMnemonic(KeyEvent.VK_B);
  myItem.addActionListener(this);
  myItem.addMenuKeyListener(this);
  myGroup.add(myItem);
  myMenu.add(myItem);

  return myMenu;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню