想加一些快捷键~~不管焦点在哪都能用的,我想到的办法是为界面上每个组件都注册按键监听~~~
有更优雅的办法没?

解决方案 »

  1.   

    MenuItem 吗?这样的话可以用setMnemonic()可以其它情况直接在最外层的组件上(如JFrame)加不可以吗?
      

  2.   


    你理解错了,可能我没说清楚~~
    我意思是:在这个软件的界面内~~不管焦点在哪个按钮上都能监听到键盘事件……我在做个计算器,要实现可以用键盘操作,我的方法是—— 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);想问有没有简化的方法?
      

  3.   

    楼主直接给JFrame注册KeyListener不就行了
      

  4.   


    可以使用addActionListener.
    btnStartServer.addActionListener(this);public void actionPerformed(ActionEvent e) {
      Thread thread = null;
      if(btnStartServer == e.getSource()) {
        System.out.println("success");
      } 
    }
      

  5.   

    直接注册JFramen貌似也有些问题,有的可以响应键盘事件有时有不行了……谁有关于JFrame键盘监听的具体点的资料吗?
      

  6.   

    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键都可以触发事件。
      

  7.   


    addActionListener也用了,不过是监听按钮的……keyListener才能响应键盘的操作啊~~