有关事件处理的问题!
我按书上的打出一个有关事件处理的程序,但有编译时错误!我不太明白为何出错,希望高手门指点,源程序和出错信息如下:
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MouseTest
{
public static void main(String[] args)
{
CustomEventFrame frame = new CustomEventFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class CustomEventFrame extends JFrame
{
public CustomEventFrame()
{
setTitle("CustomeEventTest");
setSize(WIDTH,HEIGHT);
CustomEventPanel panel = new CustomEventPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
}
public static final int WIDTH = 300;
public static final int HEIGHT = 200;
}
class CustomEventPanel extends JPanel
{
public CustomEventPanel()
{
y=0;
circles = new ArrayList();
Timer t = new Timer(100);
TimerAction listener = new TimerAction();
t.addTimerListener(listener);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D)g;
g2.translate(0,y);
for(int i=0;i<circles.size();i++)
g2.draw((Ellipse2D)circles.get(i));
}
private ArrayList circles;
private int y;
private class TimerAction implements TimerListener
{
public void timeElapsed(TimerEvent event)
{
if(getWidth() == 0) return;
int x = generator.nextInt(getWidth());
Ellipse2D circle = new Ellipse2D.Double(x,-y,SIZE,SIZE);
circles.add(circle);
y++;
repaint();
}
private Random generator = new Random();
private static final int SIZE = 5;
}
}
class TimerEvent extends AWTEvent
{
public TimerEvent(Timer t)
{
super(t,TIMER_EVENT);
}
public static final int TIMER_EVENT = AWTEvent.RESERVED_ID_MAX + 5555;
}
interface TimerListener extends EventListener
{
public void timeElapsed(TimerEvent event);
}
class Timer extends JComponent implements Runnable
{
public Timer(int i)
{
listenerList = new EventListenerList();
interval = i;
Thread t = new Thread(this);
t.start();
}
public void addTimerListener(TimerListener listener)
{
listenerList.add(TimerListener.class,listener);
}
public void removeTimerListener(TimerListener listener)
{
listenerList.remove(TimerListener.class,listener);
}
public void run()
{
while(true)
{
try { Thread.sleep(interval);}
catch(InterruptedException e){}
TimerEvent event = new TimerEvent(this);
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
queue.postEvent(event);
}
}
public void processEvent(AWTEvent event)
{
if(event instanceof TimerEvent)
{
EventListener[] listeners = listenerList.getListeners(TimerListener.class);
for(int i =0;i<listeners.length;i++)
((TimerListener)listeners[i]).timeElapsed((TimerEvent)event);
}
else
super.processEvent(event);
}
private int interval;
private EventListenerList listeners;
}
Error Messages:
--------------------Configuration: Sketch - JDK version 1.4.0 <Default>--------------------
C:\Program Files\Xinox Software\JCreator Pro\MyProjects\SwingTest\Sketch\Sketch.java:69: SketchPanel.KeyHand should be declared abstract; it does not define keyTyped(java.awt.event.KeyEvent) in SketchPanel.KeyHand
private class KeyHand implements KeyListener
^
Note: C:\Program Files\Xinox Software\JCreator Pro\MyProjects\SwingTest\Sketch\Sketch.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.
1 error
Process completed.