有关事件处理的问题!

star821116 2003-02-12 12:36:52
我按书上的打出一个有关事件处理的程序,但有编译时错误!我不太明白为何出错,希望高手门指点,源程序和出错信息如下:
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.

...全文
37 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
helpall 2003-02-12
  • 打赏
  • 举报
回复
add the following function inside KeyHand class
public void keyTyped(java.awt.event.KeyEvent evt) {
// put your implementation here
}

Because KeyHand implements KeyListener, all the methods defined in KeyListener should be implemented in KeyHand.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧