我写了个计算器程序,为每一个JButton都注册了两个监听器
一个监听器类是承接ActionListener接口,监听对Button本身的操作
另一个是继承KeyAdapter类,监听键盘,用getKeyChar()判断,然后调用JButton的doClick();
但是运行后。一开始按键盘程序没反应。只有用鼠标点了某个JButton后,程序才会开始响应键盘

解决方案 »

  1.   

    楼主在JFrame调用setVisible(true)方法之后加上一句JFrame.requestFocus()就行了,默认窗体没焦点,获取不到键盘事件。另外,按钮绑定键盘事件没必要这么麻烦,看我下面的例子: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);
        }
    }
      

  2.   

    回复2楼
    设定焦点的方法我试过了,不管用。
    你按钮绑定键盘事件的方法我没用过,试着改了下,用你那种办法还可以;
    就是每个按钮都要绑定一次;大小键盘都得弄一个稍微有麻烦。而且到现在还没想到我原来的为什么会这样。纠结ing
    谢谢了