keylistener, keypressed и keytyped

<p>у меня есть jframe (ну, класс, который расширяет jframe), и я хочу выполнить действие, когда я нажимаю клавишу f5. итак, я заставил класс реализовать keylistener. и с этим пришли три метода, keypressed, keyreleased и keytyped.</p><p>какой из этих методов я должен использовать, чтобы прослушивать нажатие клавиши f5? keypressed или keytyped? в настоящее время у меня есть следующее, однако он не печатает ничего, когда я нажимаю f5.</p><pre><code>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 } </code></pre>

<pre><code>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. </code></pre><p>я лично использовал бы keyreleased для этого. он будет стрелять только тогда, когда они поднимут палец вверх.</p><p>обратите внимание, что keytyped будет работать только для чего-то, что может быть напечатано (я не знаю, может f5 или нет), и я верю, что будет срабатывать снова и снова, если удерживать клавишу нажатой. это было бы полезно для чего-то вроде ... перемещения персонажа по экрану или чего-то еще.</p>

<p>ни. вы не должны использовать keylistener.</p><p>swing был разработан для использования с привязками клавиш. прочтите раздел из учебника по swing <a href="http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html">как использовать привязки клавиш</a> .</p>

<pre><code>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); } </code></pre>

<p>вы должны использовать <code>keypressed</code>, если вы хотите немедленного эффекта, и <code>keyreleased</code>, если вы хотите эффекта после отпускания ключа. вы не можете использовать <code>keytyped</code>, потому что f5 не символ. <code>keytyped</code> активируется только при нажатии символа.</p>