2013-12-21 3 views
0

저는 키보드에서 입력을받는 방법을 어디에서나 찾고있었습니다. 키 릴스터가 키를 누를 때 수행하는 작업을 수정하는 방법, 스윙 텍스트 행에 추가하는 방법을 찾을 수있는 방법, 기타 여러 가지 기타 사항에 대해 많은 리소스를 얻을 수 있습니다. 하지만 실제로 그것을 파일에 넣고 사용하는 방법을 찾을 수는 없습니다.Java : 실제로 KeyListener를 어떻게 사용합니까?

이제 주 기능이 끝없이 반복되는 메인 클래스를 갖기를 원할 때마다 키를 누를 때마다 "_ 키를 눌렀습니다"라는 메시지가 인쇄됩니다. 어떻게해야합니까?

나는 keyPressed 아래에있는 문자열의 system.out.print를 포함하는 KeyAdapter를 확장하는 MyKeyListener를 만들었습니다 (이것이 작동한다고 가정합니다). 하지만 실제로 그것을 사용하기 위해 메인 클래스에 무엇을 넣어야합니까? 그것을 포함하고 초기화하는 것만으로는 충분하지 않습니다. `여기

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
public class GKeyListener extends KeyAdapter { 

public void keyPressed(KeyEvent e){ 
    System.out.println("Key Pressed: " + e.getKeyChar()); 
} 
public void keyReleased(KeyEvent e){ 
    System.out.println("Key Released: " + e.getKeyChar()); 
} 
public void keyTyped(KeyEvent e){ 
    System.out.println("Key Typed: " + e.getKeyChar()); 
} 

는 주요 파일 메신저와 협력 어디에서 가야 모르는 : 여기

내 키 리스너 파일입니다 수입 java.awt.KeyEventDispatcher; 가져 오기 java.awt.KeyboardFocusManager; 가져 오기 java.awt.event.KeyEvent;

public class tempMain { 
public static void main(String[] args){ 
    while(true){ 
     GKeyListener listen =new GKeyListener(); 
     //addKeyListener(listen); 
    } 
} 
+0

임시 파일에 내가 갖고있는 것을 내가 추가하려고합니다. 여기 튜토리얼을 살펴 보았습니다. http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 텍스트 필드를 추가하지 않고 실제로 리스너를 실제로 호출하는 방법을 잘 모르겠습니다. 일하고있다 – user12092

답변

0

KeyListener은 Java AWT GUI 프레임 워크의 클래스입니다. AWT 이벤트 처리 시스템의 일부입니다. TextArea, TextField 등의 텍스트 입력 구성 요소의 주요 이벤트를 캡처하는 데 사용됩니다.

구성 요소가 없으면 KeyListener를 사용하는 것이 타당하지 않습니다.

실험을 수행하려는 경우 KeyboardFocusManager을 사용하여 텍스트 입력 구성 요소없이 키 입력을 캡처 할 수 있습니다. 이 예에서는 KeyListener을 텍스트 구성 요소에 바인딩하고 KeyboardFocusManager 전역을 사용하는 두 가지 방법을 모두 보여줍니다.

public class KeyExample extends JFrame { 
    public KeyExample() { 
     JTextField jTextField = new JTextField(20); 
     jTextField.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyTyped(KeyEvent e) { 
       System.out.println("KeyListener: " + e.getKeyChar()); 
      } 
     }); 
     add(jTextField); 
     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { 
      @Override 
      public boolean dispatchKeyEvent(KeyEvent e) { 
       System.out.println("KeyEventDispatcher: " + e.getKeyChar()); 
       return false; 
      } 
     }); 
     new KeyExample().setVisible(true); 
    } 
} 

드문 경우에만 KeyboardFocusManager을 사용해야합니다. 일반적으로 KeyListener을 사용하여 이벤트를 처리하면 충분합니다.

0

이 코드는 무엇을 :

public class tempMain { 
public static void main(String[] args){ 
    while(true){ 
     GKeyListener listen =new GKeyListener(); 
     //addKeyListener(listen); 
    } 
} 

반복적으로 모든 KeyListener, 배의 수천을 만들 수있다! 사용하고있는 KeyListener는 아무것도 실시하지 않고, 1 개만 필요하면 수천 개의 KeyListener를 다시 작성합니다. 대신 다음 사항을 고려해야합니다.

  • 먼저 GUI를 만듭니다. KeyListeners는 작동하지 않고 Swing 또는 AWT GUI가 없으면 이해가되지 않습니다. AWT보다 Swing의 사용을 선호합니다.
  • KeyListener를 포커스가있는 GUI 구성 요소에 추가하십시오.
  • 유연성과 코드 재사용 성을 높이기 위해 KeyListener 대신 Key Bindings를 사용하는 것을 진지하게 고려하십시오.

편집
코멘트에서 당신의 상태,

하지만 실제로 리스너를 호출하는 방법을 잘 모르겠어요 텍스트 필드를 추가하지 않고

가 실제로 존재하고

를 작동
  • 레코드의 경우 KeyListen JTextField와 같은 JTextComponent를 사용하면 훨씬 더 안전하고 안전한 방법으로 이러한 구성 요소에 입력을 트랩 할 수 있습니다.
  • 일반적인 OS 전반의 키 수신기를 원하는 것처럼 들립니다. 그렇다면 자바가 쉽게 이것을 지원하지 못하기 때문에 틀린 나무를 짖고있는 것입니다.
  • 이러한 종류의 기능을 사용하려면 JNA 또는 JNI를 사용하여 OS에 연결해야합니다.
  • 또는 앱에이 기능을 제공하는 타사 라이브러리를 사용하십시오.
  • 또는 AutoIt과 같은 유틸리티 프로그램을 연결하여 앱에이 기능을 제공하십시오.
관련 문제