Java Tutorial/Swing Event/Event Adapter

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

Multiple sources: A listener can be plugged into several sources.

   <source lang="java">

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; class ButtonListener implements ActionListener {

 public void actionPerformed(ActionEvent e) {
   JButton o = (JButton) e.getSource();
   String label = o.getText();
   System.out.println(label + " button clicked");
 }

} public class MultipleSources {

 public static void main(String[] args) {
   JPanel panel = new JPanel();
   JButton close = new JButton("Close");
   close.addActionListener(new ButtonListener());
   JButton open = new JButton("Open");
   open.addActionListener(new ButtonListener());
   JButton find = new JButton("Find");
   find.addActionListener(new ButtonListener());
   JButton save = new JButton("Save");
   save.addActionListener(new ButtonListener());
   panel.add(close);
   panel.add(open);
   panel.add(find);
   panel.add(save);
   JFrame f = new JFrame();
   f.add(panel);
   f.setSize(400, 300);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setVisible(true);
 }

}</source>





Register several listeners for one event.

   <source lang="java">

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; public class MultipleListeners {

 JLabel statusbar = new JLabel("0");
 JSpinner spinner = new JSpinner();
 static int count = 0;
 class ButtonListener1 implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     Integer val = (Integer) spinner.getValue();
     spinner.setValue(++val);
   }
 }
 class ButtonListener2 implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     statusbar.setText(Integer.toString(++count));
   }
 }
 public MultipleListeners() {
   JPanel panel = new JPanel();
   JButton add = new JButton("+");
   add.addActionListener(new ButtonListener1());
   add.addActionListener(new ButtonListener2());
   panel.add(add);
   panel.add(spinner);
   JFrame f = new JFrame();
   f.add(panel);
   f.add(statusbar, BorderLayout.SOUTH);
   f.setSize(300, 200);
   f.setLocationRelativeTo(null);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setVisible(true);
 }
 public static void main(String[] args) {
   new MultipleListeners();
 }

}</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>





void java.awt.Toolkit.addAWTEventListener(AWTEventListener listener, long eventMask)

   <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>