// EventTester // // Signal when various events occur // (From "Java in a Nutshell", pp. 90-2) import java.applet.*; import java.awt.*; public class EventTester extends Applet { // display the instructions public void paint(Graphics g) { g.drawString("Click, drag, and type in this window.", 10, 20); } // handle mouse events public boolean mouseDown(Event e, int x, int y) { showStatus(modifier_key_names(e.modifiers) + "Mouse Down: [" + x + "," + y + "]"); return true; } public boolean mouseUp(Event e, int x, int y) { showStatus(modifier_key_names(e.modifiers) + "Mouse Up: [" + x + "," + y + "]"); return true; } public boolean mouseDrag(Event e, int x, int y) { showStatus(modifier_key_names(e.modifiers) + "Mouse Drag: [" + x + "," + y + "]"); return true; } public boolean mouseEnter(Event e, int x, int y) { showStatus(modifier_key_names(e.modifiers) + "Mouse Enter: [" + x + "," + y + "]"); return true; } public boolean mouseExit(Event e, int x, int y) { showStatus(modifier_key_names(e.modifiers) + "Mouse Exit: [" + x + "," + y + "]"); return true; } // handle focus events public boolean gotFocus(Event e, Object what) { showStatus("Got Focus"); return true; } public boolean lostFocus(Event e, Object what) { showStatus("Lost Focus"); return true; } // handle key down and key up events public boolean keyDown(Event e, int key) { int flags = e.modifiers; if (e.id == Event.KEY_PRESS) // a regular key showStatus("Key Down: " + modifier_key_names(flags) +key_name(e)); else if (e.id == Event.KEY_ACTION) // a function key showStatus("Function Key Down: " + modifier_key_names(flags) +function_key_name(key)); return true; } public boolean keyUp(Event e, int key) { int flags = e.modifiers; if (e.id == Event.KEY_RELEASE) // Book is WRONG here! showStatus("Key Up: " + modifier_key_names(flags) +key_name(e)); else if (e.id == Event.KEY_ACTION) // a function key showStatus("Function Key Up: " + modifier_key_names(flags) +function_key_name(key)); return true; } // The remaining methods help us sort out the various key events private String modifier_key_names(int flags) { String s = "["; if (flags == 0) return ""; if ((flags & Event.SHIFT_MASK) != 0) s += "Shift "; if ((flags & Event.CTRL_MASK) != 0) s += "Control "; if ((flags & Event.META_MASK) != 0) s += "Meta "; if ((flags & Event.ALT_MASK) != 0) s += "Alt "; s += "]"; return s; } // return the name of a regular (ASCII) key private String key_name(Event e) { char c = (char) e.key; // If CTRL flag is set, handle ASCII control characters if (e.controlDown()) { if (c < ' ') { c += '@'; return "^" + c; } } else { // If CTRL flag is not set, then certain ASCII // control characters have special meaning. switch(c) { case '\n': return "Return"; case '\t': return "Tab"; case '\033': return "Escape"; case '\010': return "Backspace"; } } // handle the remaining possibilities if (c == '\177') return "Delete"; else if (c == ' ') return "Space"; else return String.valueOf(c); } // return the name of a function key private String function_key_name(int key) { switch(key) { case Event.UP: return "Up Arrow"; case Event.DOWN: return "Down Arrow"; case Event.LEFT: return "Left Arrow"; case Event.RIGHT: return "Right Arrow"; } return "Unknown Function Key"; } }