KeyListener, keyPressed или keyTyped
У меня есть JFrame (ну, class, который расширяет JFrame), и я хочу сделать действие, когда я нажимаю клавишу F5. Итак, я сделал class реализующим KeyListener. И с этим пришли три метода: keyPressed, keyReleased и keyTyped.
Какой из этих методов следует использовать для прослушивания F5? keyPressed или keyTyped? В настоящее время у меня есть следующее, однако он ничего не печатает, когда я нажимаю F5.
public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_F5) System.out.println("F5 pressed"); } public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub }
- «Заполнить» символы Юникода в ярлыках
- Поверните JLabel или ImageIcon на Java Swing
- Перемещение JLabel в другой JLabels - GUI
- Как обмениваться данными с двумя (2) classами SwingWorker в Java
- Как установить выходной stream в TextArea
- Прокрутка JTable до указанного указателя строки
- Невозможно создать прозрачный и незадекларированный JFrame в JDK7 при включении nimbus
- как обращаться с плохим выбором файла для отображения изображения в качелях
- как перетаскивать файлы из каталога в java
- Java - глобальный диалог многоразового загрузки
- Как переместить мой JMenuBar в панель меню экрана в Mac OS X?
- Java Swing: динамическое изменение GUI
- Выбор файла в панели с Swing
keyPressed - when the key goes down keyReleased - when the key comes up keyTyped - when the unicode character represented by this key is sent by the keyboard to system input.
Я лично использовал бы keyReleased для этого. Он срабатывает только тогда, когда они поднимают палец вверх.
Обратите внимание, что keyTyped будет работать только на то, что может быть напечатано (я не знаю, может ли F5 или нет), и я считаю, что он будет срабатывать снова и снова, если ключ удерживается нажатой. Это было бы полезно для чего-то вроде … перемещения персонажа по экрану или что-то в этом роде.
Ни. Вы не должны использовать KeyLIstener.
Swing был разработан для использования с Key Bindings. Прочтите раздел из руководства Swing о том, как использовать привязки клавиш .
Вы должны использовать keyPressed
если хотите немедленный эффект, и keyReleased
если вы хотите получить эффект после отпускания ключа. Вы не можете использовать keyTyped
потому что F5 не является символом. keyTyped
активируется только при нажатии символа.
private String message; private ScreenManager s; //Here is an example of code to add the keyListener() as suggested; modify public void init(){ Window w = s.getFullScreenWindow(); w.addKeyListener(this); public void keyPressed(KeyEvent e){ int keyCode = e.getKeyCode(); if(keyCode == KeyEvent.VK_F5) message = "Pressed: " + KeyEvent.getKeyText(keyCode); }