2013-11-23 1 views
0

Я хочу, чтобы поймать некоторые горячие клавиши с 2-буквенных клавиш, как Ctrl+P,P (Ctrl+P и нажмите P не отпуская Ctrl), но ниже код не работает:Захват горячих клавиш в свинг

KeyStroke.getKeyStroke(KeyEvent.VK_P & KeyEvent.VK_P, InputEvent.CTRL_MASK) 
//or 
KeyStroke.getKeyStroke(KeyEvent.VK_P | KeyEvent.VK_P, InputEvent.CTRL_MASK) 

Он захватывает только Ctrl+P

+0

Просто угадайте, но не должны ли вы получать два разных нажатия клавиш, сначала для «Ctrl + P», а для «P»? – svz

+0

@svz, да, но как узнать, нажимаются ли они одновременно Ctrl + P, P? –

ответ

2

Затем вам нужно использовать два отдельных ключа и каждый отдельный KeyStroke. Например:

KeyStroke p = KeyStroke.getKeyStroke('P'); 
KeyStroke control = KeyStroke.getKeyStroke("control P"); 

Прочитайте раздел из свинга учебника по How to Use Key Bindings для получения дополнительной информации.

+0

Что делать, если я нажимаю их отдельно? либо P, либо Ctrl + P? –

+0

вы уверены, что это «P» и «control P»? 'Ctrl + P, P' == Ctrl + P и P без выделения Ctrl ~~ Ctrl + P 2 раза. –

+0

Извините, я неправильно понял вопрос. Swing не позволяет вам ввести «P» второй раз, не отпуская клавишу управления. KeyEvent будет отслеживать все ключи модификатора (управление, Alt, сдвиг) и время ввода другого ключа. Таким образом, вам нужно будет написать какой-то пользовательский код, чтобы узнать, генерируются ли в строке два события Control + P. – camickr