2016-08-05 2 views
1

У меня есть два языка на моей Windows 10 (английский и русский). Я бегу следующий фрагмент кода:SWT неправильно обнаруживает комбинации клавиш

public static void main(String[] args) throws Exception { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setSize(640, 480); 
    shell.setLocation(500, 250); 
    shell.setText("SWT"); 

    FillLayout layout = new FillLayout(); 
    shell.setLayout(layout); 

    shell.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      List<String> keys = new ArrayList<>(); 
      if ((e.stateMask & SWT.CTRL) != 0) { 
       keys.add("Ctrl"); 
      } 
      if ((e.stateMask & SWT.ALT) != 0) { 
       keys.add("Alt"); 
      } 
      if ((e.stateMask & SWT.SHIFT) != 0) { 
       keys.add("Shift"); 
      } 
      keys.add(Character.toString((char) e.keyCode)); 
      System.out.println(keys); 
     } 
    }); 

    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 
} 

Когда язык установлен на английский и жму Right Alt + T, программа корректно выводит [Alt, t].

Однако при переключении языка на русский и нажатии Right Alt+T программа печатает [Ctrl, Alt, t]. Это неверно, потому что я не нажимал Ctrl.

Это раздражает, потому что наши привязки ключей Eclipse RCP (такие как Alt+F7 или Alt+Shift+F5) работают неправильно.

Любые идеи, по которым SWT неправильно обнаруживает Ctrl?

Я использую SWT от новейшего Eclipse 4.6 (SWT 3.105.0).

+0

Вы проверили https://www.eclipse.org/swt/bugs.php? – zapl

+1

Вы не используете кнопку AltGr (справа 'Alt') вместо стандартной кнопки' Alt' (слева 'Alt')? Похоже, что интерпретация 'AltGr' тесно связана с раскладкой клавиатуры. –

+0

@LorisSecuro Да, я использую Right Alt – ZhekaKozlov

ответ

1

По историческим причинам, ключ AltGr (справа Alt), используемый в неамериканских раскладок клавиатуры автоматически преобразуются в операционной системе в качестве Ctrl + Alt (see Wikipedia about this) ,

Так что это не связано конкретно с SWT.

Чтобы избежать этой проблемы, пользователи должны просто использовать стандарт Alt (слева Alt).

+0

Я не могу сказать клиентам, что просто не использовать Right Alt. Есть ли обходной путь для этого? – ZhekaKozlov

-1

Вы пробовали отключить ярлык, чтобы изменить язык в окнах 10.

Смежные вопросы