2015-02-07 3 views
-1

나는 사용자 키 스트로크 (keystroke)를 얻고 그것을 type 문자의 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

앱 외부에서 키 누름을 얻으려면 JNA를 사용해야합니다. – Adam

+0

완벽한 오이스 트, 어떻게 할 수 있는지 알려주세요. – johan

+0

숙제입니까? JNA는 심각하게 문제의 가치가 없습니다, 그냥 귀하의 애플 리케이션이 귀하의 애플 리케이션 이외의 keypresses 얻을 수없는 제한을 받아들입니다 – Adam

답변

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

+0

@ 아담 처음에 그 부분을 놓치고 편집했습니다. –

+0

클래스 NativeKeyListener를 프로젝트에 가져올 수 있습니까 – johan

0

Java는 표준 라이브러리를 사용하여 프로그램이 소유하는 모든 창 외부에서 키 입력을 가져 오는 방법을 제공하지 않습니다.

Java Native Access 라이브러리 (및 기타)가이를 수행하는 방법을 제공합니다.
간단한 라이브러리를 검색하는 경우 JIntellitype을 선호 할 수 있습니다.

관련 문제