< Day Day Up > |
Key events tell you when the user is typing at the keyboard. Specifically, key events are fired by the component with the keyboard focus when the user presses or releases keyboard keys. For more information, see How to Use the Focus Subsystem (page 583) in Chapter 9. Note: For reacting in a special way to particular keys, you usually should use key bindings instead of a key listener. See How to Use Key Bindings (page 623) in Chapter 9. You can be notified about two basic kinds of key events: the typing of a Unicode character, and the pressing or releasing of a key on the keyboard. The first kind of event is called a key-typed event. The second kind is either a key-pressed or key-released event. In general, you should try to handle only key-typed events unless you need to know when the user presses keys that don't correspond to characters . For example, if you want to know when the user types some Unicode characterwhether as the result of pressing one key such as 'A' or from pressing several keys in sequenceyou should handle key-typed events. On the other hand, if you want to know when the user presses the F1 key, or whether the user pressed the '3' key on the number pad, you need to handle key-pressed events. Note: To fire keyboard events, a component must have the keyboard focus. To make a component get the keyboard focus, follow these steps:
Version Note: This section reflects the focus API introduced in released 1.4. As of that release, the focus subsystem consumes focus traversal keys, such as Tab and Shift Tab. If you need to prevent the focus traversal keys from being consumed, you can call component.setFocusTraversalKeysEnabled(false) on the component that is firing the key events. Your program must then handle focus traversal on its own. Alternatively, you can use a KeyEventDispatcher to prelisten to all key events. How to Write a Focus Listener (page 665) has detailed information on the focus subsystem. You can obtain detailed information about a particular key-pressed event. For example, you can query a key-pressed event to determine if it was fired from an action key. Examples of action keys include Copy, Paste, Page Up, Undo, and the arrow and function keys. As of release 1.4, you can also query a key-pressed or key-released event to determine the location of the key that fired the event. Most key events are fired from the standard keyboard, but the events for some keys, such as Shift, have information on whether the user pressed the Shift key on the left or the right side of the keyboard. Likewise, the number '2' can be typed from either the standard keyboard or from the number pad. For key-typed events you can get the key character value as well as any modifiers used. Note: You shouldn't rely on the key character value returned from getKeyChar unless it's involved in a key-typed event. Figure 7 demonstrates key events. It consists of a text field that you can type into, followed by a text area that displays a message every time the text field fires a key event. A button at the bottom of the window lets you clear both the text field and text area. Figure 7. The KeyEventDemo application.
Try This:
You can find the example's code in KeyEventDemo.java . Here's the demo's key event-handling code: public class KeyEventDemo ... implements KeyListener ... { ...//where initialization occurs: typingArea = new JTextField(20); typingArea.addKeyListener(this); //Uncomment this if you wish to turn off focus traversal. The //focus subsystem consumes focus traversal keys, such as Tab //and Shift Tab. If you uncomment the following line of code, //this disables focus traversal and the Tab events become //available to this the key event listener. //typingArea.setFocusTraversalKeysEnabled(false); ... /** Handle the key typed event from the text field. */ public void keyTyped(KeyEvent e) { displayInfo(e, "KEY TYPED: "); } /** Handle the key pressed event from the text field. */ public void keyPressed(KeyEvent e) { displayInfo(e, "KEY PRESSED: "); } /** Handle the key released event from the text field. */ public void keyReleased(KeyEvent e) { displayInfo(e, "KEY RELEASED: "); } ... protected void displayInfo(KeyEvent e, String s){ ... //You should only rely on the key char if the event //is a key typed event. int id = e.getID(); if (id == KeyEvent.KEY_TYPED) { char c = e.getKeyChar(); keyString = "key character = '" + c + "'"; } else { int keyCode = e.getKeyCode(); keyString = "key code = " + keyCode + " (" + KeyEvent.getKeyText(keyCode) + ")"; } int modifiers = e.getModifiersEx(); modString = "modifiers = " + modifiers; tmpString = KeyEvent.getModifiersExText(modifiers); if (tmpString.length() > 0) { modString += " (" + tmpString + ")"; } else { modString += " (no modifiers)"; } actionString = "action key? "; if (e.isActionKey()) { actionString += "YES"; } else { actionString += "NO"; } locationString = "key location: "; int location = e.getKeyLocation(); if (location == KeyEvent.KEY_LOCATION_STANDARD) { locationString += "standard"; } else if (location == KeyEvent.KEY_LOCATION_LEFT) { locationString += "left"; } else if (location == KeyEvent.KEY_LOCATION_RIGHT) { locationString += "right"; } else if (location == KeyEvent.KEY_LOCATION_NUMPAD) { locationString += "numpad"; } else { // (location == KeyEvent.KEY_LOCATION_UNKNOWN) locationString += "unknown"; } ...//Display information about the KeyEvent... } } The Key Listener APITable 18 lists the methods in the KeyListener interface and Table 19 lists the methods in the KeyEvent class. Also refer to the KeyListener API documentation at: http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyListener.html. The KeyEvent API documentation is online at: http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html. Table 18. The KeyListener Interface (The corresponding adapter class is KeyAdapter . [a] )
Table 19. The KeyEvent Class [a]
Examples That Use Key ListenersThe following examples use key listeners.
|
< Day Day Up > |