📄 46.txt
字号:
//
事件队列测试
//
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.event.*;
// 显示框架,并得到屏幕像素
public class TimerTest
{
public static void main(String[] args)
{
EventFrame frame = new EventFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
frame.addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
// define Frame
class EventFrame extends JFrame
{
public EventFrame()
{
setSize(WIDTH, HEIGHT);
setTitle("事件队列测试");
// create a panel
EventPanel panel = new EventPanel();
Container contentPane = getContentPane(); // add panel to frame
contentPane.add(panel);
}
public static final int WIDTH = 500;
public static final int HEIGHT = 400;
}
// define panel
class EventPanel extends JPanel
{
//private String s ;
public EventPanel()
{
y = 0;
circles = new ArrayList();
Timer t = new Timer(100);
TimerAction listener = new TimerAction();
t.addTimerListener(listener);
//t.run();
}
public void paintComponent(Graphics g)
{
super.paintComponent (g);
Graphics2D g2 = (Graphics2D) g;
//translate the origin to create illusion of falling drops
g2.translate(0,y);
//draw all circles
g2.setPaint(Color.red);
for (int i = 0; i< circles.size();i++)
g2.draw((Ellipse2D)circles.get(i));
}
private int y;
private ArrayList circles;
private class TimerAction implements TimerListener
{
public TimerAction(){}
public void timeElapsed(TimerEvent e)
{
if (getWidth()==0) return ; //panel not shown
// add another circle
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;
}
}
// event class
class TimerEvent extends AWTEvent
{
public TimerEvent(Timer t )
{
super(t,TIMER_EVENT);
}
public static final int TIMER_EVENT = RESERVED_ID_MAX + 5555;
}
//listener interface
interface TimerListener extends EventListener
{
public void timeElapsed (TimerEvent e);
}
// Timer class that is the source of timer events
class Timer extends JComponent implements Runnable
{
public Timer (int i )
{
listenerList = new EventListenerList ();
interval = i;
Thread t = new Thread (this );
t.start();
}
private int interval ;
private EventListenerList listeners;
// add timer listener
public void addTimerListener(TimerListener listener)
{
listenerList.add(TimerListener.class , listener );
}
// removes timer listener
public void removeTimerListener(TimerListener listener)
{
listenerList.remove(TimerListener.class , listener );
}
//posts new timer event <code> interval </code> milliseconds
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 e)
{
if(e instanceof TimerEvent)
{
EventListener[] listeners =listenerList.getListeners(TimerListener.class );
for (int i = 0; i<listeners.length;i++)
((TimerListener)listeners[i]).timeElapsed((TimerEvent)e);
}
else
super.processEvent(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -