Java/Event/Customized Event

Материал из Java эксперт
Перейти к: навигация, поиск

ActionMap javax.swing.JComponent.getActionMap()

   <source lang="java">

import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; public class Main {

 public static void main(String[] argv) throws Exception {
   JButton component = new JButton();
   MyAction action = new MyAction();
   component.getActionMap().put(action.getValue(Action.NAME), action);
 }

} class MyAction extends AbstractAction {

 public MyAction() {
   super("my action");
 }
 public void actionPerformed(ActionEvent e) {
   System.out.println("hi");
 }

}

 </source>
   
  
 
  



Creating a Custom Event

   <source lang="java">

import java.util.EventListener; import java.util.EventObject; import javax.swing.event.EventListenerList; class MyEvent extends EventObject {

 public MyEvent(Object source) {
   super(source);
 }

} interface MyEventListener extends EventListener {

 public void myEventOccurred(MyEvent evt);

} class MyClass {

 protected EventListenerList listenerList = new EventListenerList();
 public void addMyEventListener(MyEventListener listener) {
   listenerList.add(MyEventListener.class, listener);
 }
 public void removeMyEventListener(MyEventListener listener) {
   listenerList.remove(MyEventListener.class, listener);
 }
 void fireMyEvent(MyEvent evt) {
   Object[] listeners = listenerList.getListenerList();
   for (int i = 0; i < listeners.length; i = i+2) {
     if (listeners[i] == MyEventListener.class) {
       ((MyEventListener) listeners[i+1]).myEventOccurred(evt);
     }
   }
 }

} public class Main {

 public static void main(String[] argv) throws Exception {
   MyClass c = new MyClass();
   c.addMyEventListener(new MyEventListener() {
     public void myEventOccurred(MyEvent evt) {
       System.out.println("fired");
     }
   });
 }

}

 </source>
   
  
 
  



Customized Event

   <source lang="java">

import java.awt.AWTEvent; import java.awt.ruponent; import java.awt.Container; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.EventListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; public class CustomEventPanel extends JPanel implements TimerListener {

 private int currentValue = 10;
   JProgressBar bar = new JProgressBar(1,100);
 public CustomEventPanel() {
   TimerComponent t = new TimerComponent(1000);
   t.addTimerListener(this);
   add(bar);
 }
 public void timeElapsed(TimerEvent evt) {
   currentValue += 10;
   bar.setValue(currentValue);
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.setTitle("Customized Event");
   frame.setSize(300, 80);
   frame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
   Container contentPane = frame.getContentPane();
   contentPane.add(new CustomEventPanel());
   frame.show();
 }

} interface TimerListener extends EventListener {

 public void timeElapsed(TimerEvent evt);

} class TimerComponent extends Component implements Runnable {

 private int interval;
 private TimerListener listener;
 private static EventQueue evtq;
 public TimerComponent(int i) {
   interval = i;
   Thread t = new Thread(this);
   t.start();
   evtq = Toolkit.getDefaultToolkit().getSystemEventQueue();
   enableEvents(0);
 }
 public void addTimerListener(TimerListener l) {
   listener = l;
 }
 public void run() {
   while (true) {
     try {
       Thread.sleep(interval);
     } catch (InterruptedException e) {
     }
     TimerEvent te = new TimerEvent(this);
     evtq.postEvent(te);
   }
 }
 public void processEvent(AWTEvent evt) {
   if (evt instanceof TimerEvent) {
     if (listener != null)
       listener.timeElapsed((TimerEvent) evt);
   } else
     super.processEvent(evt);
 }

} class TimerEvent extends AWTEvent {

 public static final int TIMER_EVENT = AWTEvent.RESERVED_ID_MAX + 5555;
 public TimerEvent(TimerComponent t) {
   super(t, TIMER_EVENT);
 }

}


 </source>
   
  
 
  



implements AWTEventListener

   <source lang="java">

import java.awt.AWTEvent; import java.awt.Toolkit; import java.awt.event.AWTEventListener; import java.awt.event.ActionEvent; import java.awt.event.ruponentEvent; import java.awt.event.WindowEvent; import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; public class Main implements AWTEventListener {

 public void eventDispatched(AWTEvent evt) {
   if (evt.getID() == WindowEvent.WINDOW_OPENED) {
     ComponentEvent cev = (ComponentEvent) evt;
     if (cev.getComponent() instanceof JFrame) {
       System.out.println("event: " + evt);
       JFrame frame = (JFrame) cev.getComponent();
       loadSettings(frame);
     }
   }
 }
 public static void loadSettings(JFrame frame) {
   System.out.println("loading");
 }
 public static void saveSettings() {
   System.out.println("saving");
 }
 public static void main(String[] args) throws Exception {
   Toolkit tk = Toolkit.getDefaultToolkit();
   final Main main = new Main();
   tk.addAWTEventListener(main, AWTEvent.WINDOW_EVENT_MASK);
   final JFrame frame = new JFrame("");
   frame.setName("your frame");
   JMenuBar mb = new JMenuBar();
   JMenu menu = new JMenu("File");
   menu.add(new AbstractAction("Quit") {
     public void actionPerformed(ActionEvent evt) {
       try {
         main.saveSettings();
         System.exit(0);
       } catch (Exception ex) {
         System.out.println(ex);
       }
     }
   });
   mb.add(menu);
   frame.setJMenuBar(mb);
   frame.pack();
   frame.setVisible(true);
 }

}

 </source>
   
  
 
  



int java.awt.AWTEvent.getID()

   <source lang="java">

import java.awt.AWTEvent; import java.awt.Toolkit; import java.awt.event.AWTEventListener; import java.awt.event.ActionEvent; import java.awt.event.ruponentEvent; import java.awt.event.WindowEvent; import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; public class Main implements AWTEventListener {

 public void eventDispatched(AWTEvent evt) {
   if (evt.getID() == WindowEvent.WINDOW_OPENED) {
     ComponentEvent cev = (ComponentEvent) evt;
     if (cev.getComponent() instanceof JFrame) {
       System.out.println("event: " + evt);
       JFrame frame = (JFrame) cev.getComponent();
       loadSettings(frame);
     }
   }
 }
 public static void loadSettings(JFrame frame) {
   System.out.println("loading");
 }
 public static void saveSettings() {
   System.out.println("saving");
 }
 public static void main(String[] args) throws Exception {
   Toolkit tk = Toolkit.getDefaultToolkit();
   final Main main = new Main();
   tk.addAWTEventListener(main, AWTEvent.WINDOW_EVENT_MASK);
   final JFrame frame = new JFrame("");
   frame.setName("your frame");
   JMenuBar mb = new JMenuBar();
   JMenu menu = new JMenu("File");
   menu.add(new AbstractAction("Quit") {
     public void actionPerformed(ActionEvent evt) {
       try {
         main.saveSettings();
         System.exit(0);
       } catch (Exception ex) {
         System.out.println(ex);
       }
     }
   });
   mb.add(menu);
   frame.setJMenuBar(mb);
   frame.pack();
   frame.setVisible(true);
 }

}

 </source>
   
  
 
  



Removing listeners: remove the registered listeners.

   <source lang="java">

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; public class RemoveListener {

 class ButtonListener implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     System.out.println(++count);
   }
 }
 JButton add = new JButton("+");
 JCheckBox active = new JCheckBox("Active listener");
 ButtonListener buttonlistener = new ButtonListener();
 int count = 0;
 public RemoveListener() {
   JPanel panel = new JPanel();
   active.addItemListener(new ItemListener() {
     public void itemStateChanged(ItemEvent event) {
       if (active.isSelected()) {
         add.addActionListener(buttonlistener);
       } else {
         add.removeActionListener(buttonlistener);
       }
     }
   });
   panel.add(add);
   panel.add(active);
   JFrame f = new JFrame();
   f.add(panel);
   f.setSize(310, 200);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setVisible(true);
 }
 public static void main(String[] args) {
   new RemoveListener();
 }

}

 </source>