2012-06-18 3 views
0

Я сделал прослушиватель клавиш для своего приложения, и мне нужно определить код клавиши, когда пользователь нажимает клавишу переключения + ключ.Java Keyboard get shifted char

Например, когда пользователь нажимает клавишу переключения + клавишу 2 (английская клавиатура), она должна печатать @. Я сделал быстрый переключатель/случай, чтобы определить, какой сдвинутый ключ, но он не работает на азертитных клавиатурах и масках.

Есть ли способ в java получить сдвинутый ключ или что-то еще?

Это довольно сложно объяснить.

My 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 "#"; 

      ..... 

Спасибо за вашу помощь.

С уважением.

+0

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

ответ

0

Наконец, я сделал кадр, который позволяет пользователю выбрать его раскладку клавиатуры. Затем я просто сделал простой 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

Посмотрите на метод getModifiers() в классе KeyEvent. Это покажет вам, какие специальные клавиши нажимаются (Alt, Ctrl, Shift)

Пример:

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

У меня уже этот код. Все, что мне нужно, это связанный код клавиши нажатой клавиши при нажатии сдвига. Пример: SHIFT + 1 дает мне! – Manitoba

+0

Ваш пример будет работать, только если пользователь * * удерживает Shift. Правильный способ (с использованием getModifiers()) - это 'boolean shift = (keyEvent.getModifiers() & KeyEvent.VK_SHIFT) == KeyEvent.VK_SHIFT;'. –

+0

Помимо того, что это не то, о чем попросил ОП. ;) – brimborium

1

Попробуйте использовать KeyEvent#getKeyChar(). Для события Shift+a, это возвращает A. Но это работает только в методе KeyListener#keyTyped(), а не в других (keyReleased/keyPressed). Вот небольшой пример, который работает очень хорошо. Я пробовал разные раскладки клавиатуры. Ваш пример (Shift+2) возвращение @ в Qwerty, и т.д.

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 Я добавил небольшой пример. Он отлично работает ... Я получаю '@' для 'Shift + 2' с qwerty ... – brimborium

+0

Ну, моя проблема в том, что я поймаю код ключа с помощью кода JNI. Поэтому у меня есть функция с именем nativeKeyTyped, которая получает NativeKeyEvent. Это событие работает точно так же, как и KeyEvent, который вы мне дали. Если я прочитаю модификаторы, когда набирается ключ, он дает мне «0», когда клавиша shift НЕ нажата, и «1», когда она есть. Но когда я читаю код ключа с getKeyChar, он всегда возвращает мне «маленький» символ. – Manitoba