如何获得用户的击键?

时间:2015-02-07 21:48:39

标签: java swing awt keystroke

我设法让用户击键并将其存储在character字符的arrayList中。我遇到的唯一问题是,当用户在JTextArea之外键入内容时,我将无法再获得击键。即使使用Microsoft的用户不是JTextArea,也有办法获得击键。

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
public class Sadasd extends JFrame {

    private JTextField userText;
    private JTextArea chatWindow;
     ArrayList<Character> stringList;
    public Sadasd(String host){
        super(" mofo!");
         stringList = new ArrayList<Character>();
        userText = new JTextField();
        userText.setEditable(false);
        userText.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){
                    userText.setText("");
                }
            }
        );

        add(userText, BorderLayout.NORTH);
        chatWindow = new JTextArea();
        add(new JScrollPane(chatWindow), BorderLayout.CENTER);
        setSize(300,150);
        setVisible(true);
    chatWindow.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
       //  System.out.println(e.getKeyChar());
         stringList.add(e.getKeyChar());
        System.out.println(stringList);
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }
} );
    }
}

2 个答案:

答案 0 :(得分:0)

实际上,不使用任何库都是不可能的。

您可能需要查看JNativeHook,它将为您完成所有艰苦工作。

这是从我给你的链接粘贴的一个例子:

public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
            GlobalScreen.unregisterNativeHook();
        }
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }    
}

要完成此任务,JNativeHook通过Java的本机接口利用与平台相关的本机代码来创建低级系统范围的挂钩,并将这些事件传递给您的应用程序。

答案 1 :(得分:0)

Java没有提供一种方法,通过标准库,可以在程序拥有的任何窗口之外获取击键。

Java Native Access图书馆(和其他人)提供了一种方法。
如果您正在搜索更简单的库,则可能更喜欢JIntellitype