关于按键监听的一个问题 想加一些快捷键~~不管焦点在哪都能用的,我想到的办法是为界面上每个组件都注册按键监听~~~有更优雅的办法没? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MenuItem 吗?这样的话可以用setMnemonic()可以其它情况直接在最外层的组件上(如JFrame)加不可以吗? 你理解错了,可能我没说清楚~~我意思是:在这个软件的界面内~~不管焦点在哪个按钮上都能监听到键盘事件……我在做个计算器,要实现可以用键盘操作,我的方法是—— gui.addButton.addKeyListener(keyListener); gui.subtractButton.addKeyListener(keyListener); gui.multiplyButton.addKeyListener(keyListener); gui.divideButton.addKeyListener(keyListener); gui.resultButton.addKeyListener(keyListener); gui.dotButton.addKeyListener(keyListener); gui.resetButton.addKeyListener(keyListener); gui.removeButton.addKeyListener(keyListener); gui.addKeyListener(keyListener); gui.screenText.addKeyListener(keyListener);想问有没有简化的方法? 楼主直接给JFrame注册KeyListener不就行了 可以使用addActionListener.btnStartServer.addActionListener(this);public void actionPerformed(ActionEvent e) { Thread thread = null; if(btnStartServer == e.getSource()) { System.out.println("success"); } } 直接注册JFramen貌似也有些问题,有的可以响应键盘事件有时有不行了……谁有关于JFrame键盘监听的具体点的资料吗? import javax.swing.*;import java.awt.event.*;import java.awt.*;public class Test { public static void main(String[] args) { final JFrame frame = new JFrame(); frame.setSize(400, 300); JButton button = new JButton("按钮"); InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = button.getActionMap(); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), "home"); actionMap.put("home", new AbstractAction(){ public void actionPerformed(ActionEvent event) { JOptionPane.showMessageDialog(frame, "你按下了HOME键"); } }); frame.add(new JButton("按钮"), BorderLayout.NORTH); frame.add(button, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}楼主可以参考一下这个,不管焦点在窗口中的哪个组件上,HOME键都可以触发事件。 addActionListener也用了,不过是监听按钮的……keyListener才能响应键盘的操作啊~~ [40分:结贴超快]singleton模式同步锁问题 AjaxSwing使用 为什么在JDK1.4里正常执行的.class文件,在6.0里却不行? String的问题 为什么java语言中有static方法? 请教数据集ResultSet取数据的奇怪现象 请问一个数据库问题 散分 如何拦截println的字串 Spring咨询 请问关于Applet的CODEBASE的设置问题 今天第一次参加笔试,遇到了这道题,大家帮忙解答下,谢谢啦
你理解错了,可能我没说清楚~~
我意思是:在这个软件的界面内~~不管焦点在哪个按钮上都能监听到键盘事件……我在做个计算器,要实现可以用键盘操作,我的方法是—— gui.addButton.addKeyListener(keyListener);
gui.subtractButton.addKeyListener(keyListener);
gui.multiplyButton.addKeyListener(keyListener);
gui.divideButton.addKeyListener(keyListener);
gui.resultButton.addKeyListener(keyListener);
gui.dotButton.addKeyListener(keyListener);
gui.resetButton.addKeyListener(keyListener);
gui.removeButton.addKeyListener(keyListener);
gui.addKeyListener(keyListener);
gui.screenText.addKeyListener(keyListener);想问有没有简化的方法?
可以使用addActionListener.
btnStartServer.addActionListener(this);public void actionPerformed(ActionEvent e) {
Thread thread = null;
if(btnStartServer == e.getSource()) {
System.out.println("success");
}
}
import java.awt.event.*;
import java.awt.*;public class Test {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setSize(400, 300);
JButton button = new JButton("按钮");
InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = button.getActionMap();
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), "home");
actionMap.put("home", new AbstractAction(){
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(frame, "你按下了HOME键");
}
});
frame.add(new JButton("按钮"), BorderLayout.NORTH);
frame.add(button, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}楼主可以参考一下这个,不管焦点在窗口中的哪个组件上,HOME键都可以触发事件。
addActionListener也用了,不过是监听按钮的……keyListener才能响应键盘的操作啊~~