2015-11-05 3 views
0

Я внедрил JDialog и добавил флажок отдельно от ok и отменил кнопку. Я поместил отмену как кнопку по умолчанию, и когда диалог появляется, отмена выбирается по умолчанию и при нажатии клавиши ввода выполняется операция отмены.Нажатие клавиши ввода не выбирает флажок

Нажав на вкладку, когда я доберусь до флажка и нажмите клавишу ввода, он не устанавливает флажок. Но при нажатии клавиши пробела он выбирается.

Однако, переключаясь между ок и кнопкой отмены, используя вкладку, а затем нажав enter, выполняются соответствующие действия.

Просьба указать, что должно быть сделано, чтобы флажок был выбран при нажатии enter.

+0

у вас есть 'Key Listener', что если' проверить box' находится в фокусе или что-то подобное, что она выбирает его ? – 3kings

+0

Насколько я помню, «введите» обычно не выбирает флажок. Используется косвенный ключ. В противном случае вы можете добавить KeyListener в ckeckbox. –

+0

Не используйте KeyLIstener. Swing был разработан для использования с «Key Bindings». – camickr

ответ

1

В каждом LAF есть ключ по умолчанию, который используется для установки флажка.

Отъезд Key Bindings, который будет показывать привязки по умолчанию для флажка в вашем LAF.

Если вы хотите добавить эту же функциональность в другой ключ, вам необходимо управлять привязкой клавиш. Поэтому для управления клавишей Enter вы должны использовать:

InputMap im = checkB.getInputMap(); 
KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("SPACE"); 
KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("ENTER"); 
im.put(addedKeyStroke, im.get(existingKeyStroke)); 
existingKeyStroke = KeyStroke.getKeyStroke("released SPACE"); 
addedKeyStroke = KeyStroke.getKeyStroke("released ENTER"); 
im.put(addedKeyStroke, im.get(existingKeyStroke)); 

Вышеупомянутый код будет поддерживать клавишу Enter на одном компоненте. Если вы хотите, введите ключевую поддержку на все флажки в вашем приложении, то вы должны использовать:

InputMap im = (InputMap)UIManager.get("CheckBox.focusInputMap"); 
+0

Большое спасибо, это помогло. –

+0

@AlokRanjan, рад, что это помогло. Не забудьте «принять» ответ, нажав на галочку, чтобы люди знали, что проблема решена. Вы также должны принимать ответы на свои предыдущие вопросы. – camickr

+0

У меня недостаточно репутации, чтобы повысить это. –