2015-02-07 36 views
-1

我設法獲得用戶鍵擊並將其存儲在一個字符類型的arrayList中。我唯一的問題是,當用戶在JTextArea之外鍵入內容時,我無法再獲取鍵擊。那麼即使用戶使用微軟的工作不是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

您需要使用JNA來獲取應用程序外的按鍵。 – Adam 2015-02-07 21:52:07

+0

orite這是完美的,你可以請指導我如何去做 – johan 2015-02-07 21:54:50

+0

這是功課嗎? JNA是不值得的麻煩,只是接受限制你的應用程序無法在你的應用程序外得到按鍵 – Adam 2015-02-07 21:56:43

回答

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的原生界面來創建低層次,全系統鉤子利用與平臺相關的本地代碼並將這些事件交付給您的應用程序。

+0

這個問題想讓按鍵在應用程序外面按下,即在OS級別。 – Adam 2015-02-07 21:51:29

+0

@Adam首先錯過了該部分,進行了編輯。 – 2015-02-07 22:00:28

+0

如何將類NativeKeyListener導入到項目 – johan 2015-02-07 22:01:43

0

Java並沒有提供一種方法來使用標準庫在您的程序擁有的任何窗口之外獲取按鍵。

庫(和其他)Java Native Access提供了一種方法來做到這一點。
如果您正在尋找更簡單的庫,您可能更喜歡JIntellitype