在没有聚焦的情况下获取java中的击键?

时间:2013-10-25 07:10:08

标签: java swing key-bindings keystroke

我想创建一个java程序,用于获取键盘而无需聚焦,并且没有用于我的项目的keyevent类对象。 有没有办法这样做.. ??

我尝试了这个,但它没有达到我的要求!!

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.text.Keymap;

public class key1 {

    private static void showUI() {
        JFrame jFrame = new JFrame("");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container container = jFrame.getContentPane();
        JTextField txt = new JTextField();
        container.add(txt, BorderLayout.NORTH);
        ActionListener actListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                System.out.println(event.getActionCommand() + " selected");
            }
        };
        JPanel jPane = new JPanel();
        JButton defaultButton = new JButton("Hit Enter");
        defaultButton.addActionListener(actListener);
        jPane.add(defaultButton);
        JButton otherButton = new JButton("Onother Button");
        otherButton.addActionListener(actListener);
        jPane.add(otherButton);
        container.add(jPane, BorderLayout.SOUTH);
        Keymap map = txt.getKeymap();
        KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
        map.removeKeyStrokeBinding(stroke);
        jFrame.getRootPane().setDefaultButton(defaultButton);
        jFrame.setSize(350, 250);
        jFrame.setVisible(true);
    }

    public static void main(String args[]) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                showUI();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

我不认为这在Swing级别是可能的..整个KeyEvent API围绕着一些焦点的Component :(

事实上,我非常确定JVM只会根据操作系统提供的内容生成事件。如果有焦点,你只能获取这些事件。

然而 ,我找到了一个可能做你想做的库。我从来没有用过它..只是出于好奇而抬起头来看:

http://code.google.com/p/jnativehook/