(что удивительно: мне) :-) Модификаторы привязок идентификаторов ключей "типизированных" не поддерживаются: хотя вы можете создавать и связывать такие в inputMap, они никогда не будут найдены, потому что keyStrokes, сгенерированные для типизированных keyEvents, действительно используют keyChar иигнорировать модификаторы.Это создание происходит в JComponent.processKeyBindings (...)
boolean processKeyBindings(KeyEvent e, boolean pressed) {
if (!SwingUtilities.isValidKeyEventForKeyBindings(e)) {
return false;
}
// Get the KeyStroke
KeyStroke ks;
if (e.getID() == KeyEvent.KEY_TYPED) {
ks = KeyStroke.getKeyStroke(e.getKeyChar());
}
else {
ks = KeyStroke.getKeyStroke(e.getKeyCode(),e.getModifiers(),
(pressed ? false:true));
}
Думая об этом, это может иметь смысл: нажатие / отпускание обрабатывает физические клавиши, в то время как типизированный является окончательным объединенным «выводом» одного илибольше физических ключей.Если для какой-либо комбинации не существует действительного keyChar, событие keyTyped не генерируется.
Основная проблема заключается в хорошо известном сша центризме разработчиков Swing / AWT: они считаются физическими ключами только тех, которые находятся на используемом макете ;-) Нет способа (который я знаю) получить другие ключив макетно-независимой манере.Надеюсь оказаться неправым