Die Beispiele in diesem Artikel fassen gängige Ereignisreaktionsmethoden in Java zusammen, einschließlich Containerklassenüberwachung, Listener-Klassen, AbstractAction, Reflektion usw. Als Referenz. Die spezifischen Methoden sind wie folgt:
In der grafischen Java-Benutzeroberfläche sind zunächst die Schritte erforderlich, um Ereignisse zu verarbeiten :
1. Erstellen Sie eine Komponente (Steuerung), die Antworten akzeptiert
2. Implementieren Sie relevante Event-Listening-Schnittstellen
3. Registrieren Sie den Aktions-Listener der Ereignisquelle
4. Ereignisverarbeitung, wenn das Ereignis ausgelöst wird
Dementsprechend kann die Reaktion auf Vorfälle auf die folgende zentralisierte Weise erfolgen.
1. Überwachung der Containerklasse <br/>Wirkung: Klicken Sie auf drei Schaltflächen im Formular, um die entsprechende Antwortzeit zu erreichen.
import java.awt.*; import java.awt.*; // Wenn Sie eine Klasse deklarieren, fügen Sie „implements ActionListener“ hinzu, um die Überwachungsschnittstelle zu implementieren. dann mit Kommas trennen // Zum Beispiel: „implements ActionListener,KeyListener“ ButtonListener(String title){ super(title); this.setLayout(new FlowLayout()); ok = new JButton("Return"); ; //Die folgenden drei Anweisungen registrieren Listener für Schaltflächen ok.addActionListener(this); cancel.addActionListener(this); getContentPane().add(ok); getContentPane().add(exit); //Ereignisverarbeitung abschließen, wenn das Ereignis ausgelöst wird public void actionPerformed(ActionEvent e){ if(e. getSource ()==ok) System.out.println("OK"); if(e.getSource()==cancel) System.out.println("Return"); if(e.getSource()==exit) System.exit(0);; } public static void main(String args[]) { ButtonListener pd=new ButtonListener("ActionEvent Demo"); pd.setVisible(true); } }
2. Die Überwachungsklasse realisiert den Effekt: Klicken Sie auf drei Schaltflächen im Formular, um die entsprechende entsprechende Zeit zu erkennen.
import java.awt.*; import java.awt.*; import javax.swing.*; class ButtonListener1 //Es gibt hier keine Implementierung von JButton { super( title); this.setLayout(new FlowLayout()); ok = new JButton("OK"); = new JButton("Exit"); ok.addActionListener(new MyListener());; getContentPane().add(cancel); getContentPane().add(exit); } public static void main(String args[]) { ButtonListener pd=new ButtonListener("ActionEvent Demo"); pd.setSize(250,100); pd.setVisible(true); //Aktionsereignisse abhören class MyListener implementiert ActionListener{ public void actionPerformed(ActionEvent e){ if( e .getActionCommand()=="OK") System.out.println("OK"); if(e.getActionCommand()=="Return") System.out.println("Return"); if(e.getActionCommand()=="Exit") System.exit(0);;
3. Verwenden Sie die AbstractAction-Klasse, um die Überwachung zu implementieren
Wirkung: Klicken Sie auf das Menü, um zu antworten
import java.awt.BorderLayout; import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JMenuBar ; import javax.swing.JMenuItem; import javax.swing.JOptionPane; //Diese Klasse erbt AbstractAction und muss die Methode actionPerformed() implementieren. class AbstractEvent erweitert AbstractAction{ //private static final long serialVersionUID = 1L; AbstractEvent(){ } public void actionPerformed(ActionEvent e){ //Popup-Bestätigungsdialogfeld if (e.getActionCommand()=="open"){ JOptionPane . showMessageDialog(null, "open"); }else if (e.getActionCommand()=="close"){ JOptionPane.showMessageDialog(null, "Close"); }else if (e.getActionCommand()=="run"){ JOptionPane.showMessageDialog(null, "Run"); }else if (e.getActionCommand()==" stop"){ JOptionPane.showMessageDialog(null, "stop"); } } } public class TestAbstractEvent { private static JMenuBar-Menüleiste; privater statischer JFrame-Frame; // Der spezifische Handler zur Angabe von MenuEvent wird durch die AbstractEvent-Klasse vervollständigt. final Action MenuEvent=new AbstractEvent(); public TestAbstractEvent(){ frame.getContentPane().setLayout(new BorderLayout()); ("file"); //Instanziieren Sie einen Menüpunkt und fügen Sie einen Listener für openAction hinzu, JMenuItem menuItemopen=new JMenuItem("open"); menuItemopen.addActionListener("close"); menuItemclose.addActionListener(MenuEvent); "); JMenuItem menuItemrun=new JMenuItem("run"); menuItemrun.addActionListener(MenuEvent); .add(menuFile); menubar.add(menuTool); menubar.setVisible(true); frame.add(menubar,BorderLayout.NORTH); public static void main(String[] args) { new TestAbstractEvent(); } }
4. AbstractAction-Klasse + Reflection-Methode <br/>Wirkung: Klicken Sie auf drei Schaltflächen in der Symbolleiste. Über den Namen der Schaltfläche erhält Reflection eine Klassenimplementierungsantwort mit demselben Namen wie die Schaltfläche.
import java.awt.BorderLayout; import javax.swing.*; import javax.swing.*; private JFrame action=null; ViewAction(){ } public ViewAction(String ActionName){ this.ActionName=ActionName; //this.frame=frame } @Override public void; actionPerformed(ActionEvent e) { Action action=getAction(this.ActionName); action.execute(); } private Action getAction(String ActionName){ try{ if (this.action==null){ Action action=(Action)Class .forName(ActionName).newInstance(); this.action=action; }catch(Exception e){ return null; erweitert JFrame { public JToolBar bar=new JToolBar(); String buttonName[]={"b1",b2",b3"}; public TestAE(){ for (int i=0; i<buttonName.length;i++){ ViewAction action=new ViewAction(buttonName[i]); JButton button=new JButton(buttonName[i]); button.addActionListener(action); bar.add(button); this.getContentPane().add(bar,BorderLayout.NORTH); this.setLocationTo(null); true); } public static void main(String [] args){ new TestAE(); } interface Action{ void Execute(); } Klasse B1 implementiert Action{ Public void Execute(){ JOptionPane.showMessageDialog(null, "b1 wurde angeklickt"); } } Klasse B2 implementiert Action{ Public void Execute(){ JOptionPane.showMessageDialog(Null, "b2 wurde geklickt"); } } class b3 implementiert Action{ public voidexecute(){ JOptionPane.showMessageDialog(null, "Clicked b3"); } }
Die obigen Beispiele sind gut erklärt und sollten nicht schwer zu verstehen sein. Ich hoffe, dass die in diesem Artikel beschriebenen Beispiele für alle hilfreich sind.