KeyListener a małe literki

0

Witam. Jak w funkcji
public void keyTyped(KeyEvent e) {}

ustawić akcję po naciśnięciu małej literki np a,
bo VK_A tyczy się tylko wielkich liter...

Pozdrawiam

0
e.getKeyChar() == 'a'

?

0

W keyType nie ma rozrozniania na male / wielkie literki - przycisk to przycisk, chodzi i fizyczny przycisk.

0
bobbobbob napisał(a)

Witam. Jak w funkcji
public void keyTyped(KeyEvent e) {}

ustawić akcję po naciśnięciu małej literki np a,
bo VK_A tyczy się tylko wielkich liter...
a gdzie ty masz małe literki na klawiaturze?

0

Właśnie że nie o fizyczny, o to chodzi w keyPressed i Released. Dokumentacja:

"Key typed" events are higher-level and generally do not depend on the platform or keyboard layout. They are generated when a Unicode character is entered, and are the preferred way to find out about character input. In the simplest case, a key typed event is produced by a single key press (e.g., 'a'). Often, however, characters are produced by series of key presses (e.g., 'shift' + 'a'), and the mapping from key pressed events to key typed events may be many-to-one or many-to-many. Key releases are not usually necessary to generate a key typed event, but there are some cases where the key typed event is not generated until a key is released (e.g., entering ASCII sequences via the Alt-Numpad method in Windows). No key typed events are generated for keys that don't generate Unicode characters (e.g., action keys, modifier keys, etc.). The getKeyChar method always returns a valid Unicode character or CHAR_UNDEFINED. For key pressed and key released events, the getKeyCode method returns the event's keyCode. For key typed events, the getKeyCode method always returns VK_UNDEFINED.

"Key pressed" and "key released" events are lower-level and depend on the platform and keyboard layout. They are generated whenever a key is pressed or released, and are the only way to find out about keys that don't generate character input (e.g., action keys, modifier keys, etc.). The key being pressed or released is indicated by the getKeyCode method, which returns a virtual key code.

Virtual key codes are used to report which keyboard key has been pressed, rather than a character generated by the combination of one or more keystrokes (such as "A", which comes from shift and "a").

For example, pressing the Shift key will cause a KEY_PRESSED event with a VK_SHIFT keyCode, while pressing the 'a' key will result in a VK_A keyCode. After the 'a' key is released, a KEY_RELEASED event will be fired with VK_A. Separately, a KEY_TYPED event with a keyChar value of 'A' is generated.

0

No to przeczytaj jeszcze raz ze zrozumieniem to co sam wkleiles. KeyTyped = KeyPressed + KeyReleased + mozliwe kombinacje shiftow itp.

0

No - czyli wielkość liter rozróżnia. Właśnie sam sobie zaprzeczyłeś.

0

KeyTyped nie odroznia znakow - to co otrzymuje listener takiego eventa to obiekt w ktorym moze sprawdzic jakie klawisze byly wcisniete i na tej podstawie moze np wypisac male lub duze literki czy inne cuda. Sam keyTyped nie ma duzych / malych znakow - mozna jedna interpretowac znak jako maly jak nie ma shifta, lub jako wielki jak jest - ale to nie jest rola keyTyped tylko tego co ten event otrzymuje.

0

KeyPressed i keyReleased to niskopoziomowe zdarzenia wciśnięć fizycznych klawiszy, keyTyped to sekwencja poprzednich, która powstaje przy tworzeniu konkretnego znaku. KeyEvent przekazywany do keyTyped zawiera w sobie konkretny (keyCode jest "UNDEFINED", a sekwencja wciśniętych klawiszy wcale nie musi być znana - więc nawet nie "można sprawdzić, jakie klawisze były wciśnięte") znak Unicode generowany na podstawie zdarzeń pressed/released modifierów i zwykłych klawiszy (fizycznych). Toteż, jeśli klikniemy shift+a, dostaniemy eventy:
KEY_PRESSED (VK_SHIFT)
KEY_PRESSED (VK_A)
KEY_RELEASED (VK_A)
KEY_TYPED ('A') - w przeciwieństwie do 'a', który wyszedłby bez shifta. Czyli można z tego wyciągnąć wielkość litery, nie ważne, na jakiej zasadzie to działa. Jeśli dokładnie tak samo napisane jest w dokumentacji i jeśli to DZIAŁA, to tak musi rzeczywiście być.

0

Masz racje. Przeczytalem jeszcze raz i dziala jak mowisz. [soczek]
'For key typed events, the getKeyCode method always returns VK_UNDEFINED.'
Nie wiem zatem jak autor watku otrzymal VK_A w KeyTyped.

0

Mhm. Być może używał getKeyChar() i porównywał to z VK_A (a wszystkie stałe VK_A..VK_Z mają wartość odpowiadającą znakom ascii; VK_A = 65). Jak pisałem w pierwszym poście, trzeba porównać ze znakiem, VKeye tyczą się tylko zdarzeń pressed/released (mimo że dla dużego 'A' wszystko by się zgadzało).

1 użytkowników online, w tym zalogowanych: 0, gości: 1