【发布时间】:2015-09-04 16:29:02
【问题描述】:
最初我使用 JMenu 并建立热键以使用加速器工作。它工作得很好。现在我想要 JButton 中的相同行为,但我被卡住了。 这是我编写的代码:请分享您的想法,以便我能够走上正确的道路。
import javax.swing.*;
import java.awt.Event;
import java.awt.event.*;
import java.util.Arrays;
public class ShowDialogBox{
JFrame frame;
public static void main(String[] args){
ShowDialogBox db = new ShowDialogBox();
}
public ShowDialogBox(){
frame = new JFrame("Show Message Dialog");
// create an Action doing what you want
KeyStroke keySave = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK);
Action performSave = new AbstractAction("Click Me") {
public void actionPerformed(ActionEvent e) {
//do your save
System.out.println("clickMe");
}
};
JButton button = new JButton("Click Me");
button.getActionMap().put("Click Me", performSave);
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keySave, "Click Me");
button.addActionListener(new MyAction());
frame.add(button);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class MyAction implements ActionListener{
public void actionPerformed(ActionEvent e){
String[] items = {
"1", "2", "3"
};
JList list = new JList(items);
JPanel panel = new JPanel();
panel.add(list);
JOptionPane.showMessageDialog(null, panel);
}
提前致谢
【问题讨论】:
-
热键通常使用 alt-key 组合来完成,通过使用 AbstractAction、调用
setAction(...)并为 Action 提供适当的助记符,使用 JButtons 和 JMenuItems 很容易做到这一点。您确定要进行控制键组合吗?如果是这样,请使用KeyEvent.CTRL_DOWN_MASK而不是KeyEvent.CTRL_MASK。
标签: java swing jbutton hotkeys jmenu