0% found this document useful (0 votes)
9 views

java applet interfaces

The document provides an overview of mouse and keyboard events in Java applets, focusing on event-driven programming. It explains the concepts of events, interfaces, and event listener interfaces, detailing how to implement mouse and keyboard event handling. Several examples illustrate how to use these events to change applet behavior and display information based on user interactions.

Uploaded by

narendranvel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

java applet interfaces

The document provides an overview of mouse and keyboard events in Java applets, focusing on event-driven programming. It explains the concepts of events, interfaces, and event listener interfaces, detailing how to implement mouse and keyboard event handling. Several examples illustrate how to use these events to change applet behavior and display information based on user interactions.

Uploaded by

narendranvel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 23

CS396N - Web Programming

Spring 2002
Chapter 11 - Mouse and Keyboard Events

What are Events?

 Java applets are mainly event driven programs.


 User activities related to keyboard and mouse are called events.

Interfaces

 abstract class is a class, defined using the keyword abstract


 abstract class signatures of the methods but no body
 abstract class may contain some abstractmethods and some non-abstract
methods.
 to use these classes the body of the abstractmethods must be completed.

 Interface is similar to an abstract class with two major differences:

(a) in defining an interface the key word interface is used instead of the
keyword abstract
(b) none of the methods in an interface are defined, only signatures are
included.

 Extend a superclass using the keyword extends


 Incorporate an interface into a class using the keyword implements.
 Syntax:

public class sample extends example implements interface1{

 An interface implementation must include definitions for all methods in the


interface.

Event Listener Interfaces

 java.awt.Event package : Listener interfaces to handle events.


All the interfaces and the methods in them.

Event Generated by Listener Interface Methods in them


Action event Pressing a button ActionListener actionPerformed()
Adjustment event Scroll bar is AdjustmentListener adjustmentValueChanged()
manipulated
Component event A component is ComponentListener componentHidden()
hidden, moved, componentMoved()
resized, or shown componentResized()
componentShown()
Container event A component is added ContainerListener componentAdded()
or removed from a componentRemoved()
container
Focus event A component gains or FocusListener focusGained()
loses focus focusLost()
Item event An item is selected or ItemListener itemStateChanged()
deselected
Key event A key is pressed, KeyListener keyPressed()
released or typed keyReleased()
keyTyped()
Mouse event Mouse button is MouseListener mouseClicked()
clicked, pressed or mouseEntered()
released. Mouse mouseExited()
pointer enters leaves a mousePressed()
component mouseReleased()
Mouse event Mouse pointer is MouseMotionListener mouseDragged()
dragged or moved mouseMoved()
Text event Text value is changed TextListener textValueChanged()
Window event A window is WindowListener windowActivated()
activated, closed, windowClosed()
deactivated, windowClosing()
deiconfied, opened, or windowDeactivated()
quit windowDeiconified()
windowIconified()
windowOpened()

Getting ready to handle events


Step 1: Import classes from the package:
import java.awt.event.*;
Step 2: Implement the appropriate listener interfaces.
public class sample extends Applet implements
listenerinterface1{

} //Several listener interfaces can be listed, separated by


commas.

Step 3: Register the listener object with the appropriate event source.

event_source_object.addevent_listenername(event_listener_object);
//Normally, you use the keyword this for event_listener_object.

Step 4: Define all the methods of the implemented listener interfaces. I

Mouse Events

Event Class MouseEvent

Listener Interface MouseListener

Listener Methods public void mouseEntered(MouseEvent event)


public void mouseExited(MouseEvent event)
public void mouseClicked(MouseEvent event)
public void mousePressed(MouseEvent event)
public void mouseReleased(MouseEvent event)

By looking at the name of the methods, it is clear which


activity invokes which method.

event.getX() returns (int) the x coordinate of mouse


position.
event.getY() returns (int) the y coordinate of mouse
position.
event.getClickCount() returns (int) the number of mouse
clicks.

Four steps:

Step 1: Include the following import statement:

import java.awt.event.*;
Step 2: Include Implements MouseListener :

public class w2 extends Applet implements MouseListener {

Step 3: Register addMouseListener method in the applet.

this.addMouseListener (this);

Step 4: Define the five MouseListener methods:

public void mouseClicked(MouseEvent event){


}

public void mouseEntered(MouseEvent event){


}

public void mouseexited(MouseEvent event){


}

public void mousePressed(MouseEvent event){


}

public void mouseReleased(MouseEvent event){


}

Example
The following program changes the applet background color, whenever
the mouse event occurs.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class MouseEvent1 extends Applet


implements MouseListener{
public void init() {

this.addMouseListener(this);
}

public void mouseClicked(MouseEvent e){

setBackground(Color.blue);
}

public void mouseEntered(MouseEvent e){

setBackground(Color.cyan);
}

public void mouseExited(MouseEvent e){

setBackground(Color.green);
}

public void mousePressed(MouseEvent e){

setBackground(Color.magenta);
}

public void mouseReleased(MouseEvent e){

setBackground(Color.yellow);
}

Mouse Motion Activities

 Moving and dragging the mouse generates an object of the MouseEvent class.

Event Class MouseEvent

Listener Interface MouseMotionListener


Listener Methods public void mouseMoved(MouseEvent event)

Invoked when the mouse button has been moved on a


component (with no buttons down).

public void mouseDragged(MouseEvent event)

Invoked when a mouse button is pressed on a component


and then dragged.

event.getX() returns (int) the x coordinate of mouse


position.

event.getY() returns (int) the y coordinate of mouse


position.

event.getClickCount() returns (int) the number of mouse


clicks.
Example
The following program changes an applet’s background color when any
mouse activity take place.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class MouseEvent2 extends Applet


implements
MouseMotionListener,MouseListener{

public void init() {

this.addMouseListener(this);
this.addMouseMotionListener(this);
}

public void mouseMoved(MouseEvent event){

setBackground(Color.white);
}

public void mouseDragged(MouseEvent event){


setBackground(Color.black);
}

public void mouseClicked(MouseEvent e){

setBackground(Color.blue);
}

public void mouseEntered(MouseEvent e){

setBackground(Color.cyan);
}

public void mouseExited(MouseEvent e){

setBackground(Color.green);
}

public void mousePressed(MouseEvent e){

setBackground(Color.magenta);
}

public void mouseReleased(MouseEvent e){

setBackground(Color.yellow);
}

Example

The following program displays the coordinates of the mouse.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class MouseEvent3 extends Applet
implements
MouseMotionListener,MouseListener{

public void init() {

this.addMouseListener(this);
this.addMouseMotionListener(this);
}

public void mouseMoved(MouseEvent event){

setBackground(Color.white);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mouseDragged(MouseEvent event){

setBackground(Color.black);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mouseClicked(MouseEvent event){

setBackground(Color.blue);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mouseEntered(MouseEvent event){

setBackground(Color.cyan);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mouseExited(MouseEvent event){


setBackground(Color.green);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mousePressed(MouseEvent event){

setBackground(Color.magenta);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void mouseReleased(MouseEvent event){

setBackground(Color.yellow);
int x = event.getX();
int y = event.getY();
print(x,y);
}

public void print(int x, int y){

showStatus("x coordinate is = "+x+" y


coordinate is = "+y);
}
}

Example
The following program uses the coordinates of the mouse to draw circles.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class CircleDrawer2 extends Applet


implements MouseListener {
private int radius = 25;
public void init() {
setForeground(Color.blue);
addMouseListener(this);
}

// Remaining methods are from the MouseListener interface.

public void mouseEntered(MouseEvent event) {}


public void mouseExited(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}

public void mousePressed(MouseEvent event) {


Graphics g = getGraphics();
g.fillOval(event.getX()-radius,
event.getY()-radius,
2*radius,
2*radius);
}
}

Example

Simple WhiteBoard

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

// An applet that lets you perform freehand drawing.

public class SimpleWhiteboard extends Applet {


protected int lastX=0, lastY=0;

public void init() {


setBackground(Color.white);
setForeground(Color.blue);
addMouseListener(new PositionRecorder());
addMouseMotionListener(new LineDrawer());
}

protected void record(int x, int y) {


lastX = x;
lastY = y;
}

// Record position that mouse entered window or


// where user pressed mouse button.

private class PositionRecorder extends MouseAdapter {


public void mouseEntered(MouseEvent event) {
requestFocus(); // Plan ahead for typing
record(event.getX(), event.getY());
}

public void mousePressed(MouseEvent event) {


record(event.getX(), event.getY());
}
}

// As user drags mouse, connect subsequent positions


// with short line segments.

private class LineDrawer extends MouseMotionAdapter {


public void mouseDragged(MouseEvent event) {
int x = event.getX();
int y = event.getY();
Graphics g = getGraphics();
g.drawLine(lastX, lastY, x, y);
record(x, y);
}
}
}
Keyboard Events

 Whenever a key is pressed, an object of the KeyEvent class is generated.


Event Class KeyEvent

Listener Interface KeyListener

Listener Methods public void keyPressed(KeyEvent event)

Invoked when a key is pressed.

public void keyReleased(KeyEvent event)

Invoked when a key is released.

public void keyTyped(KeyEvent event)

Invoked when a key is typed (pressed and released).

KeyEvent class For a list of Class variables (virtual key codes), which
are defined as static and final, see Virtual Key Codes
table below.

event.getKeyChar() returns (char) the character


pressed.

event.getKeyCode() returns (int) the "virtual key code",


see table below.

event.getModifiers().

event.isShiftDown() returns (boolean) true if shift key


is down.

event.isControlDown() returns (boolean) true if control


key is down.

event.isAltDown() returns (boolean) true if alt key is


down

KeyEvent.getKeyModifiersText(int modifiers) returns


(String).

KeyEvent.getKeyText(int keycode) returns (String).

Virtual Key Codes

 Refer to the key on the keyboard returned by event.getKeyCode()


 Usedas class variables.
 Produce a numeric value - but - use the symbol in the program.
Nno guarantee that the numeric value produced is the same on all
platforms.

Alpha keys VK_A through VK_Z

Numeric keys VK_0 through VK_9

Function keys VK_F1 through VK_F12

Action keys VK_BACK_SPACE

VK_ESCAPE,
VK_PRINTSCREEN,
VK_SCROLL_LOCK,
VK_PAUSE

Num pad number keys VK_NUMPAD0 through


VK_NUMPAD9

Other Num pad keys VK_NUM_LOCK, VK_SLASH,


VK_MULTIPLY,
VK_SUBTRACT, VK_ADD,
VK_HOME, VK_UP,
VK_PAGE_UP, VK_LEFT,
VK_RIGHT, VK_END,
VK_DOWN, VK_PAGE_DOWN,
VK_INSERT, VK_DELETE,
VK_ENTER

Modifier keys VK_ALT, VK_CAPS_LOCK,


VK_CONTROL, VK_META,
VK_SHIFT

Punctuation keys VK_SPACE, VK_ENTER,


VK_TAB, VK_BACK_QUOTE,
VK_SLASH, VK_BACK_SLASH,
VK_OPEN_BRACKET,
VK_CLOSE_BRACKET,
VK_PERIOD, VK_QUOTE,
VK_SEMICOLON,
VK_SEPARATOR, VK_COMMA,
VK_DECIMAL, VK_EQUALS,

Other keys VK_ACCEPT, VK_CANCEL,


VK_CLEAR, VK_CONVERT,
VK_FINAL, VK_HELP,
VK_KANA, VK_KANJI,
VK_MODECHANGE,
VK_NONCONVERT,
VK_UNDEFINED,

Note

 To check for an upper case letter use:

if ( event.getKeyCode() == VK_A &&


KeyEvent.isShiftDown())

 Similarly use event.isControlDown()and event.isAltDown().

Example

The following program displays several text boxes. Type any key in top box.
The other boxes in the applet show information about the key pressed.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Keys1 extends Applet implements
KeyListener{
TextField input;
TextField output1, output2, output3,
output4, output5;
TextField output6, output7, output8;
public void init(){

input = new TextField(30);


input.addKeyListener(this);
output1 = new TextField(30);
output2 = new TextField(30);
output3 = new TextField(30);
output4 = new TextField(30);
output5 = new TextField(30);
output6 = new TextField(30);
output7 = new TextField(30);
output8 = new TextField(30);
add(input);
add(output1);
add(output2);
add(output3);
add(output4);
add(output5);
add(output6);
add(output7);
add(output8);

public void keyTyped(KeyEvent event){

public void keyPressed(KeyEvent event){

char char1 = event.getKeyChar();


int n = event.getKeyCode();
int modifiers = event.getModifiers();
output1.setText("You pressed "+char1);

output2.setText("Virtual key code value =


"+n);
output3.setText("Name of key pressed =
"+KeyEvent.getKeyText(n));
output4.setText("Shift was pressed =
"+event.isShiftDown());
output5.setText("Control key down =
"+event.isControlDown());
output6.setText("Alt key was pressed =
"+event.isAltDown());
output7.setText("Modifiers value =
"+event.getModifiers());
output8.setText("Modifier text

="+KeyEvent.getKeyModifiersText(modifiers));

public void keyReleased(KeyEvent event) {

Output

Example

The following program displays two boxes. Type each keyboard key in the first
box and see result in the second box.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Keys2 extends Applet implements
KeyListener{
TextField input;
TextField output;
public void init(){
input = new TextField(30);
input.addKeyListener(this);
output = new TextField(30);
add(input);
add(output);
}

public void keyTyped(KeyEvent event){


}

public void keyPressed(KeyEvent event){

String string = " ";

switch(event.getKeyCode()){

case KeyEvent.VK_ACCEPT: string = "You


pressed VK_ACCEPT"; break;
case KeyEvent.VK_ADD: string = "You
pressed VK_ADD"; break;
case KeyEvent.VK_ALT: string = "You
pressed VK_ALT"; break;
case KeyEvent.VK_BACK_QUOTE: string =
"You pressed VK_BACK_QUOTE"; break;
case KeyEvent.VK_BACK_SLASH: string =
"You pressed VK_BACK_SLASH"; break;
case KeyEvent.VK_BACK_SPACE: string =
"You pressed VK_BACK_SPACE"; break;
case KeyEvent.VK_CANCEL: string = "You
pressed VK_CANCEL"; break;
case KeyEvent.VK_CAPS_LOCK: string =
"You pressed VK_CAPS_LOCK"; break;
case KeyEvent.VK_CLEAR: string = "You
pressed VK_CLEAR"; break;
case KeyEvent.VK_CLOSE_BRACKET: string =
"You pressed VK_CLOSE_BRACKET"; break;
case KeyEvent.VK_COMMA: string = "You
pressed VK_COMMA"; break;
case KeyEvent.VK_CONTROL: string = "You
pressed VK_CONTROL"; break;
case KeyEvent.VK_CONVERT: string = "You
pressed VK_CONVERT"; break;
case KeyEvent.VK_DECIMAL: string = "You
pressed VK_DECIMAL"; break;
case KeyEvent.VK_DELETE: string = "You
pressed VK_DELETE"; break;
case KeyEvent.VK_DIVIDE: string = "You
pressed VK_DIVIDE"; break;
case KeyEvent.VK_DOWN: string = "You
pressed VK_DOWN"; break;
case KeyEvent.VK_END: string = "You
pressed VK_END"; break;
case KeyEvent.VK_ENTER: string = "You
pressed VK_ENTER"; break;
case KeyEvent.VK_EQUALS: string = "You
pressed VK_EQUALS"; break;
case KeyEvent.VK_ESCAPE: string = "You
pressed VK_ESCAPE"; break;
case KeyEvent.VK_F1: string = "You
pressed VK_F1"; break;
case KeyEvent.VK_F10: string = "You
pressed VK_F10"; break;
case KeyEvent.VK_F11: string = "You
pressed VK_F11"; break;
case KeyEvent.VK_F12: string = "You
pressed VK_F12"; break;
case KeyEvent.VK_F2: string = "You
pressed VK_F2"; break;
case KeyEvent.VK_F3: string = "You
pressed VK_F3"; break;
case KeyEvent.VK_F4: string = "You
pressed VK_F4"; break;
case KeyEvent.VK_F5: string = "You
pressed VK_F5"; break;
case KeyEvent.VK_F6: string = "You
pressed VK_F6"; break;
case KeyEvent.VK_F7: string = "You
pressed VK_F7"; break;
case KeyEvent.VK_F8: string = "You
pressed VK_F8"; break;
case KeyEvent.VK_F9: string = "You
pressed VK_F9"; break;
case KeyEvent.VK_FINAL: string = "You
pressed VK_FINAL"; break;
case KeyEvent.VK_HELP: string = "You
pressed VK_HELP"; break;
case KeyEvent.VK_HOME: string = "You
pressed VK_HOME"; break;
case KeyEvent.VK_INSERT: string = "You
pressed VK_INSERT"; break;
case KeyEvent.VK_KANA: string = "You
pressed VK_KANA"; break;
case KeyEvent.VK_KANJI: string = "You
pressed VK_KANJI"; break;
case KeyEvent.VK_LEFT: string = "You
pressed VK_LEFT"; break;
case KeyEvent.VK_META: string = "You
pressed VK_META"; break;
case KeyEvent.VK_MODECHANGE: string =
"You pressed VK_MODECHANGE"; break;
case KeyEvent.VK_MULTIPLY: string = "You
pressed VK_MULTIPLY"; break;
case KeyEvent.VK_NONCONVERT: string =
"You pressed VK_NONCONVERT"; break;
case KeyEvent.VK_NUM_LOCK: string = "You
pressed VK_NUM_LOCK"; break;
case KeyEvent.VK_OPEN_BRACKET: string =
"You pressed VK_OPEN_BRACKET"; break;
case KeyEvent.VK_PAGE_DOWN: string =
"You pressed VK_PAGE_DOWN"; break;
case KeyEvent.VK_PAGE_UP: string = "You
pressed VK_PAGE_UP"; break;
case KeyEvent.VK_PAUSE: string = "You
pressed VK_PAUSE"; break;
case KeyEvent.VK_PERIOD: string = "You
pressed VK_PERIOD"; break;
case KeyEvent.VK_PRINTSCREEN: string =
"You pressed VK_PRINTSCREEN"; break;
case KeyEvent.VK_QUOTE: string = "You
pressed VK_QUOTE"; break;
case KeyEvent.VK_RIGHT: string = "You
pressed VK_RIGHT"; break;
case KeyEvent.VK_SCROLL_LOCK: string =
"You pressed VK_SCROLL_LOCK"; break;
case KeyEvent.VK_SEMICOLON: string =
"You pressed VK_SEMICOLON"; break;
case KeyEvent.VK_SEPARATER: string =
"You pressed VK_SEPARATER"; break;
case KeyEvent.VK_SHIFT: string = "You
pressed VK_SHIFT"; break;
case KeyEvent.VK_SLASH: string = "You
pressed VK_SLASH"; break;
case KeyEvent.VK_SPACE: string = "You
pressed VK_SPACE"; break;
case KeyEvent.VK_SUBTRACT: string = "You
pressed VK_SUBTRACT"; break;
case KeyEvent.VK_TAB: string = "You
pressed VK_TAB"; break;
case KeyEvent.VK_UNDEFINED: string =
"You pressed VK_UNDEFINED"; break;
case KeyEvent.VK_UP: string = "Y0u
pressed VK_UP"; break;
case KeyEvent.VK_A: string = "You
pressed VK_A"; break;
case KeyEvent.VK_B: string = "You
pressed VK_B"; break;
case KeyEvent.VK_C: string = "You
pressed VK_C"; break;
case KeyEvent.VK_D: string = "You
pressed VK_D"; break;
case KeyEvent.VK_E: string = "You
pressed VK_E"; break;
case KeyEvent.VK_F: string = "You
pressed VK_F"; break;
case KeyEvent.VK_G: string = "You
pressed VK_G"; break;
case KeyEvent.VK_H: string = "You
pressed VK_H"; break;
case KeyEvent.VK_I: string = "You
pressed VK_I"; break;
case KeyEvent.VK_J: string = "You
pressed VK_J"; break;
case KeyEvent.VK_K: string = "You
pressed VK_K"; break;
case KeyEvent.VK_L: string = "You
pressed VK_L"; break;
case KeyEvent.VK_M: string = "You
pressed VK_M"; break;
case KeyEvent.VK_N: string = "You
pressed VK_N"; break;
case KeyEvent.VK_O: string = "You
pressed VK_O"; break;
case KeyEvent.VK_P: string = "You
pressed VK_P"; break;
case KeyEvent.VK_Q: string = "You
pressed VK_Q"; break;
case KeyEvent.VK_R: string = "You
pressed VK_R"; break;
case KeyEvent.VK_S: string = "You
pressed VK_S"; break;
case KeyEvent.VK_T: string = "You
pressed VK_T"; break;
case KeyEvent.VK_U: string = "You
pressed VK_U"; break;
case KeyEvent.VK_V: string = "You
pressed VK_V"; break;
case KeyEvent.VK_W: string = "You
pressed VK_W"; break;
case KeyEvent.VK_X: string = "You
pressed VK_X"; break;
case KeyEvent.VK_Y: string = "You
pressed VK_Y"; break;
case KeyEvent.VK_Z: string = "You
pressed VK_Z"; break;
case KeyEvent.VK_0: string = "You
pressed VK_0"; break;
case KeyEvent.VK_1: string = "You
pressed VK_1"; break;
case KeyEvent.VK_2: string = "You
pressed VK_2"; break;
case KeyEvent.VK_3: string = "You
pressed VK_3"; break;
case KeyEvent.VK_4: string = "You
pressed VK_4"; break;
case KeyEvent.VK_5: string = "You
pressed VK_5"; break;
case KeyEvent.VK_6: string = "You
pressed VK_6"; break;
case KeyEvent.VK_7: string = "You
pressed VK_7"; break;
case KeyEvent.VK_8: string = "You
pressed VK_8"; break;
case KeyEvent.VK_9: string = "You
pressed VK_9"; break;
case KeyEvent.VK_NUMPAD0: string = "You
pressed VK_NUMPAD0"; break;
case KeyEvent.VK_NUMPAD1: string = "You
pressed VK_NUMPAD1"; break;
case KeyEvent.VK_NUMPAD2: string = "You
pressed VK_NUMPAD2"; break;
case KeyEvent.VK_NUMPAD3: string = "You
pressed VK_NUMPAD3"; break;
case KeyEvent.VK_NUMPAD4: string = "You
pressed VK_NUMPAD4"; break;
case KeyEvent.VK_NUMPAD5: string = "You
pressed VK_NUMPAD5"; break;
case KeyEvent.VK_NUMPAD6: string = "You
pressed VK_NUMPAD6"; break;
case KeyEvent.VK_NUMPAD7: string = "You
pressed VK_NUMPAD7"; break;
case KeyEvent.VK_NUMPAD8: string = "You
pressed VK_NUMPAD8"; break;
case KeyEvent.VK_NUMPAD9: string = "You
pressed VK_NUMPAD9"; break;
}
output.setText(string);

public void keyReleased(KeyEvent event) {

Output

Example
A better whiteboard that lets you enter text in addition to freehand drawing

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Whiteboard extends SimpleWhiteboard {
protected FontMetrics fm;

public void init() {


super.init();
Font font = new Font("Serif", Font.BOLD, 20);
setFont(font);
fm = getFontMetrics(font);
addKeyListener(new CharDrawer());
}

private class CharDrawer extends KeyAdapter {


// When user types a printable character,
// draw it and shift position rightwards.

public void keyTyped(KeyEvent event) {


String s = String.valueOf(event.getKeyChar());
getGraphics().drawString(s, lastX, lastY);
record(lastX + fm.stringWidth(s), lastY);
}
}
}

Output

You might also like