| hacker_mila |
14-07-2009 11:46 AM |
ßæÏ áÊØÈíÞ ÈáÛÉ Java ãåã ÌÏÇ ááãÈÑãÌíä
http://www.ocean-nt.net/vb/images/besmallah.gif
ÃÞÏã áßã ßæÏ ÕÛíÑ áÅäÔÇÁ Event æåÐÇ ÈáÛÉ Java
ßæÏ PHP:
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(); } }/** *un cadre avec un panneau affichant des gouttesde pluie **/ class CustomEventFrame extends JFrame { public CustomEventFrame() { setTitle("CustomEventTest"); setSize(WIDTH,HEIGHT); //Ajouter un panneau au cadre CustomEventPanel panel=new CustomEventPanel(); Container contentPane =getContentPane(); contentPane.add(panel); } public static final int WIDTH =300; public static final int HEIGHT =200; } /** *Un panneau affichant des gouttes de pluie */ 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; //traduire l'origine pour simuler des gouttes de pluie g2.translate(0,y); //dessiner tous les cercles 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;//panneau pas encore affiché // ajouter un autre cercle int x=generator.nextInt(getWidth()); Ellipse2D circle =new Ellipse2D.Double(x,-y,SIZE,SIZE); circles.add(circle); //décaler l'origine y++; repaint(); } private Random generator =new Random(); private static final int SIZE=9; } } /** *Une classe d'évenment perssonalisé. */ class TimerEvent extends AWTEvent { public TimerEvent(Timer t){ super(t,TIMER_EVENT); } public static final int TIMER_EVENT=AWTEvent.RESERVED_ID_MAX+5555; } /** *une interface écouteur d'évenment personalisé. **/ interface TimerListener extends EventListener { public void timeElapsed(TimerEvent event); } /** *Une classe Timer personnalisée qui est *la source des événements du temporisateur. **/ class Timer extends JComponent implements Runnable { public Timer (int i) { listenerList =new EventListenerList(); interval =i; Thread t =new Thread (this); t.start(); } /**Ajouter un ecouteur de temporisateur *@param listener L'écouteur à ajouter **/ public void addTimerListener(TimerListener listener) { listenerList.add(TimerListener.class ,listener); } /** *Supprime un écouteur de temporisateur *@param listener L'ecouteur à supprimer **/ public void removeTimerListener(TimerListener listener) { listenerList.remove(TimerListener.class,listener); } /** *Envoie un nouvel événement temporisateur à *chaque <code>interval</code>millième de seconde. **/ 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; }
ÃäÇ ÃäÊÙÑ ÅÓÊÝÓÇÑÇÊßã Ãæ Ãí ÃÓÆáÉ ÊØÑÍ Íæá Java
æÔßÑÇ
|