【发布时间】:2014-06-08 17:43:08
【问题描述】:
按下 Alt+H
键时我必须手动运行方法if("The key pressed==(Alt+H)"){
callMethod();
}
public void callMethod(){
//Some codes here
}
我如何在 Java 中真正做到这一点。请给我一个简单的方法来做到这一点。
【问题讨论】:
标签: java swing key pressed mnemonics
按下 Alt+H
键时我必须手动运行方法if("The key pressed==(Alt+H)"){
callMethod();
}
public void callMethod(){
//Some codes here
}
我如何在 Java 中真正做到这一点。请给我一个简单的方法来做到这一点。
【问题讨论】:
标签: java swing key pressed mnemonics
关于Oracle Tutorial - Enabling Keyboard Operation 的内容值得在这里阅读,其中将与示例一起进行详细说明。
阅读更多关于Oracle Tutorial - How to Use Key Bindings
直接来自上述教程的一些示例:
//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 Tutorial - How to Use Buttons, Check Boxes, and Radio Buttons
示例代码:(Alt-H 会点击中间按钮)
JButton b2 = new JButton("Middle button", middleButtonIcon);
b2.setMnemonic(KeyEvent.VK_H);
【讨论】:
如果使用菜单,那么您可以使用setMnemonic(),有关示例,请参见How to Use Menus。另一种选择是使用Key Bindings。例如:
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();
}
});
}
}
【讨论】:
最好的方法是使用 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;
【讨论】: