给按钮添加快捷键。
网上搜了搜,不满足自己的需要。
用到getActionMap() and getInputMap()
需要先了解ActionMap,InputMap,KeyStroke
1.keyStroke 用来保存一个快捷键。
这里用到的方法getKeyStroke(int keyCode, int modifiers, boolean onKeyRelease)
- keyCode:字母数字按键对应的码,
- modifiers:修饰符(如shift,alt等),
- onKeyRelease: false 代表按下时触发(当松开时触发为true)
2.InputMap
将组合按键keyStroke
起个名字
3.actionMap
将名字与效果对应
三者之间的关系:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
public class demo extends JFrame{
public demo() {
JLabel mylab=new JLabel("按钮未点击");
JButton mybt=new JButton("点击显示文字");
//鼠标点击按钮
mybt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
mylab.setText("按钮已点击");
}
});
//快捷键
mybt.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.SHIFT_DOWN_MASK,false), "Shift_z");
mybt.getActionMap().put("Shift_z", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
mylab.setText("按钮已点击");
}
});
add(mylab);
add(mybt);
setLayout(new FlowLayout());
setVisible(true);
setBounds(50,50,200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new demo();
}
}