java - keypressed - Personajes de KeyEvent
keylistener javafx (3)
KeyEvent.VK_ASTERISK
es una constante reservada para la tecla del teclado (virtual) que tiene * marcada en ella. No tiene que coincidir con el personaje que se produce cuando alguien presiona la tecla.Si desea utilizar las constantes de VK, debe escuchar los eventos de teclado y teclado y usar el método
KeyEvent.getKeyCode()
. Si desea utilizar caracteres, debe escuchar los eventos clave escritos y utilizar el métodoKeyEvent.getKeyChar()
.Algunos códigos clave pueden coincidir con el personaje solo porque es más fácil definirlo de esa manera; no hay una necesidad real de hacerlo de esa manera.
Usted dice que obtuvo un VK_8 de
getKeyCode
para escribir el asterisco. ¿Presionó una tecla de asterisco real o tuvo que escribir Shift-8?
Tengo una pregunta sobre un KeyListener
. Cuando obtengo el KeyEvent
y hago un getKeyChar()
estoy haciendo tyring para comparar y *
asterisk y voy a usar uno de los KeyEvent.VK_
define que funciona para muchas de las teclas.
Pero para esta clave particular y algunas otras, los valores no coinciden.
El * getKeyChar()
devolverá 0x2a
y el getKeyCode()
devuelve 0x38
. La definición para 0x38
es VK_8
no VK_ASTERISK
que es 0x97
.
¿Por qué ciertos códigos clave coinciden y no otros? La mayoría hace thouh. Si solo hago una comparación de personajes, funciona ( == ''*'')
, pero no estoy seguro de si esta es la mejor solución.
Gracias por toda la ayuda!
OK, estás malentendiendo algo.
Las claves son claves, y los símbolos son símbolos. Los símbolos son resultados de pulsaciones de teclas, y la misma tecla puede producir diferentes símbolos según las circunstancias (combinaciones de teclas como Alt , Control , Shift , etc.).
Entonces, el código de clave VK_8
significa la clave que puede producir símbolos 8
, *
y posiblemente otros dependiendo de la localización del teclado.
Y la * tecla dedicada en el teclado numérico es VK_MULTIPLY
- puede producir solo un símbolo *
(que yo sepa).
Probablemente no debería preocuparse por la tecla presionada por el usuario, sino por el símbolo que produjo esta acción del usuario.
Esta información la puede obtener con getKeyChar()
, pero tenga en cuenta que si el usuario presiona la combinación Shift 8 para producir *
en realidad son dos teclas ( Shift y 8 ) y obtendrá dos eventos, y el primero (para Shift ) producirá un símbolo ilegible
depende de JComponent
si desea determinar desde JTextComponent , utilice DocumentListener , si desea modificar la secuencia Char, utilice DocumentFilter
de lo contrario, consulte KeyBindings , ya que KeyListener está designado para AWT Components