получить нажатие клавиш в Java без фокусировки?

Обновить

April 2019

Просмотры

688 раз

1

я хотел сделать программу 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 ответы

1

I don't believe this is possible at the Swing level..the entire KeyEvent API revolves around some Component having focus :(

In fact, I'm pretty sure the JVM only generates events based on what the OS gives to it..and you can only get those events if something is in focus.

However, I've found a library that might do what you want. I have never used it though..just looked up out of curiosity:

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