我设法让用户击键并将其存储在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) {
}
} );
}
}
答案 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。