2

我想为我的项目制作一个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();
            }
        });
    }
}
4

1 回答 1

1

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

事实上,我很确定 JVM 只会根据操作系统提供给它的内容生成事件。而且只有在某些事情受到关注时,你才能获得这些事件。

但是,我找到了一个可以满足您需求的库。不过我从来没有用过它……只是出于好奇而抬头:

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

于 2013-10-25T07:17:04.400 回答