У меня есть два языка на моей 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).
Вы проверили https://www.eclipse.org/swt/bugs.php? – zapl
Вы не используете кнопку AltGr (справа 'Alt') вместо стандартной кнопки' Alt' (слева 'Alt')? Похоже, что интерпретация 'AltGr' тесно связана с раскладкой клавиатуры. –
@LorisSecuro Да, я использую Right Alt – ZhekaKozlov