📄 customeventtest.java
字号:
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class CustomEventTest
{
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("CustomEventTest");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
CustomEventPanel panel=new CustomEventPanel();
Container contentPane =getContentPane();
contentPane.add(panel);
}
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_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.paintComponent(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=9;
}
}
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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -