The source code:
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Keyboard1 extends Applet implements KeyListener, MouseListener { int width, height; int x, y; String s = ""; public void init() { width = getSize().width; height = getSize().height; setBackground( Color.black ); x = width/2; y = height/2; addKeyListener( this ); addMouseListener( this ); } public void keyPressed( KeyEvent e ) { } public void keyReleased( KeyEvent e ) { } public void keyTyped( KeyEvent e ) { char c = e.getKeyChar(); if ( c != KeyEvent.CHAR_UNDEFINED ) { s = s + c; repaint(); e.consume(); } } public void mouseEntered( MouseEvent e ) { } public void mouseExited( MouseEvent e ) { } public void mousePressed( MouseEvent e ) { } public void mouseReleased( MouseEvent e ) { } public void mouseClicked( MouseEvent e ) { x = e.getX(); y = e.getY(); s = ""; repaint(); e.consume(); } public void paint( Graphics g ) { g.setColor( Color.gray ); g.drawLine( x, y, x, y-10 ); g.drawLine( x, y, x+10, y ); g.setColor( Color.green ); g.drawString( s, x, y ); } }
Try clicking and typing into the applet. You'll probably have to click at least once before you begin typing, to give the applet the keyboard focus.
Go here for more information.
Here's a second applet that nicely integrates most of what we've learned so far.
import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.Vector; public class Keyboard2 extends Applet implements KeyListener, MouseListener, MouseMotionListener { int width, height; int N = 25; Color[] spectrum; Vector listOfPositions; String s = ""; int skip = 0; public void init() { width = getSize().width; height = getSize().height; setBackground( Color.black ); spectrum = new Color[ N ]; for ( int i = 0; i < N; ++i ) { spectrum[i] = new Color( Color.HSBtoRGB(i/(float)N,1,1) ); } listOfPositions = new Vector(); addKeyListener( this ); addMouseListener( this ); addMouseMotionListener( this ); } public void keyPressed( KeyEvent e ) { } public void keyReleased( KeyEvent e ) { } public void keyTyped( KeyEvent e ) { char c = e.getKeyChar(); if ( c != KeyEvent.CHAR_UNDEFINED ) { s = s + c; repaint(); e.consume(); } } public void mouseEntered( MouseEvent e ) { } public void mouseExited( MouseEvent e ) { } public void mouseClicked( MouseEvent e ) { s = ""; repaint(); e.consume(); } public void mousePressed( MouseEvent e ) { } public void mouseReleased( MouseEvent e ) { } public void mouseMoved( MouseEvent e ) { // only process every 5th mouse event if ( skip > 0 ) { -- skip; // this is shorthand for "skip = skip-1;" return; } else skip = 5; if ( listOfPositions.size() >= N ) { // delete the first element in the list listOfPositions.removeElementAt( 0 ); } // add the new position to the end of the list listOfPositions.addElement( new Point( e.getX(), e.getY() ) ); repaint(); e.consume(); } public void mouseDragged( MouseEvent e ) { } public void paint( Graphics g ) { if ( s != "" ) { for ( int j = 0; j < listOfPositions.size(); ++j ) { g.setColor( spectrum[ j ] ); Point p = (Point)(listOfPositions.elementAt(j)); g.drawString( s, p.x, p.y ); } } } }
Click, type, and move the mouse. You might see some flickering. Depending on the speed of your computer, you might also find that the mouse position is being sampled too quickly or too slowly. The upcoming lessons will give you tools to fix both of these problems.