2012-06-18 4 views
0

내 앱에 대한 키 수신기를 만들었으며 사용자가 Shift 키 + 키를 누를 때 키 코드를 식별해야합니다.Java 키보드 가져 오기 이동

예를 들어, 사용자가 시프트 키 + 키 2 (영어 키보드)을 누르면 @을 인쇄해야합니다. 나는 퀵 스위치/케이스를 만들어 어느 키인지 확인했지만 아제 티 키보드 나 맥 키보드에서는 작동하지 않는다.

Java에서 이동 한 키 또는 다른 것을 가져 오는 방법이 있습니까?

설명하기가 어렵습니다.

내 자바 앱이 키 코드를 가져 왔는데, 필요한 것은 키 코드와 관련된 이동 된 키 코드뿐입니다.

예 :

  • (QWERTY) 2 => @; 3 => #; 등등 ...
  • (AZERTY) & => 1; é => 2; 등 ... 순간

, 내 코드는 도움을

String value = String.valueOf((char)key); 
    if (shift) 
    { 
     switch (value.charAt(0)) 
     { 
      case '1': 
       return "!"; 
      case '2': 
       return "@"; 
      case '3': 
       return "#"; 

      ..... 

감사 (만 쿼티 KB 작동) 그런 식이다.

감사합니다.

+0

http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html –

답변

0

마지막으로, 사용자가 자신의 키보드 레이아웃을 선택할 수있는 프레임을했다. 그 다음으로 나는 shift 키를 얻기 위해 간단한 swith/case를 만들었습니다.

String value = String.valueOf((char)key); 
if (shift && keyboard.equals("QWERTY")) 
{ 
    switch (value.charAt(0)) 
    { 
     case '1': 
      return "!"; 
     case '2': 
      return "@"; 
     case '3': 
      return "#"; 
    } 
} 
else if (shift && keyboard.equals("AZERTY")) 
{ 
    switch (value.charAt(0)) 
    { 
     case '&': 
      return "1"; 
     case 'é': 
      return "2"; 
     case '"': 
      return "3"; 
    } 
} 
else return value; 

다른 사람에게 도움이되기를 바랍니다.

감사합니다.

0

KeyEvent 클래스의 getModifiers() 메소드를 살펴보십시오. 이 특수 키 (Alt, Ctrl 키, Shift 키를)

예를 누르면되는 당신을 말할 것이다 :

boolean oneShift = (keyEvent.getKeyCode() == KeyEvent.VK_1) && "Shift".equals(KeyEvent.getKeyModifiersText(keyEvent.getModifiers())) 
+0

이미 코드를 작성했습니다. Shift 키를 누른 상태에서 누른 키의 관련 키 코드 만 있으면됩니다. 예 : SHIFT + 1이 나를 준다! – Manitoba

+0

사용자가 Shift 키를 누른 상태에서만 * 예제가 작동합니다. getModifiers()를 사용하는 적절한 방법은'boolean shift = (keyEvent.getModifiers() & KeyEvent.VK_SHIFT) == KeyEvent.VK_SHIFT;'입니다. –

+0

이것은 OP가 요구 한 것이 아니라는 사실 외에도. ;) – brimborium

1

KeyEvent#getKeyChar()를 사용해보십시오. Shift+a 이벤트의 경우 A을 반환합니다. 그러나 이것은 KeyListener#keyTyped() 방법에서만 작동하며 다른 방법 (keyReleased/keyPressed)에서는 작동하지 않습니다. 작은 예제가 있습니다. 아주 잘 작동합니다. 나는 다른 키보드 레이아웃을 시도했다. 등 귀하의 예 (Shift+2) 반환 쿼티의 @

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 

public class Maion { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(600, 400); 
     frame.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyTyped(KeyEvent e) { 
       System.out.println("keyTyped: '" + e.getKeyChar() + "'"); 
      } 
     }); 
     frame.setVisible(true); 
    } 
} 
+0

아니요,이 코드는 나에게 키 코드가 아니라 이동 된 코드를 제공합니다. 그러나 수식어는 잘 정의되어 있습니다. – Manitoba

+0

@ Vodemki 약간의 예를 더했습니다. 그것은 잘 작동 ... qwerty와 함께'Shift + 2'에 대해'@'를 얻습니다 ... – brimborium

+0

글쎄, 내 문제는 내가 JNI 코드를 사용하여 키 코드를 잡는 것입니다. 그래서 NativeKeyEvent를받는 nativeKeyTyped라는 함수가 있습니다. 이 이벤트는 귀하가 저에게 준 KeyEvent와 동일한 방식으로 작동합니다. 키를 입력 할 때 수식어를 읽으면 시프트 키를 누르지 않으면 "0"이 나오고 "1"이면 나에게 준다. 그러나 getKeyChar로 키 코드를 읽을 때 항상 나에게 '작은'문자를 반환합니다. – Manitoba