Heim >Java >javaLernprogramm >Detaillierte Erläuterung der Java-Methode zur Behandlung von Schaltflächenklickereignissen
Der folgende Editor stellt Ihnen eine Methode zur Behandlung von Schaltflächenklickereignissen in Java vor. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf.
Verschiedene Ereignisquellen können unterschiedliche Arten von Ereignissen generieren. Beispielsweise kann eine Schaltfläche ein ActionEvent-Objekt senden und ein Fenster kann ein WindowEvent-Objekt senden.
Überblick über den AWT-Zeitverarbeitungsmechanismus:
1. Das Listener-Objekt ist eine Implementierung. spezifisch Eine Instanz der Listener-Schnittstellenklasse.
2. Die Ereignisquelle ist ein Objekt, das Listener-Objekte registrieren und Ereignisobjekte senden kann.
3. Wenn ein Ereignis auftritt, übergibt die Ereignisquelle das Ereignisobjekt an alle registrierten Listener.
4. Das Listener-Objekt verwendet die Informationen im Ereignisobjekt, um zu entscheiden, wie auf das Ereignis reagiert werden soll.
Hier ist ein Beispiel für einen Zuhörer:
ActionListener listener = ...; JButton button = new JButton("OK"); button.addActionListener(listener);
Jetzt, wann immer der Knopf gedrückt wird generiert ein „Aktionsereignis“, das Listener-Objekt wird benachrichtigt. Bei Schaltflächen, wie wir sie uns vorstellen, ist das Aktionsereignis das Klicken auf die Schaltfläche.
Um die ActionListener-Schnittstelle zu implementieren, muss die Listener-Klasse über eine Methode namens actionPerformed verfügen, die einen ActionEvent-Objektparameter empfängt.
class MyListener implements ActionListener { ...; public void actionPerformed(ActionEvent event) { //reaction to button click goes here } }
Solange der Benutzer auf die Schaltfläche klickt, erstellt das JButton-Objekt ein ActionEvent-Objekt und ruft dann listener.actionPerformed(event) auf, um das Ereignisobjekt zu übergeben. Mehrere Listener-Objekte können wie eine Schaltfläche zu einer Ereignisquelle hinzugefügt werden. Auf diese Weise ruft die Schaltfläche jedes Mal, wenn der Benutzer auf die Schaltfläche klickt, die actionPerformed-Methode aller Listener auf.
Beispiel: Umgang mit Schaltflächenklickereignissen
Um das Verständnis des Ereignisdelegationsmodells zu vertiefen, finden Sie hier ein einfaches Beispiel für die Reaktion darauf ein Button-Click-Ereignis Erklären Sie die Details, die Sie wissen müssen. In diesem Beispiel möchten Sie drei Schaltflächen in einem Bedienfeld platzieren und drei Listener-Objekte hinzufügen, die als Aktions-Listener für die Schaltflächen fungieren.
Solange der Benutzer in diesem Fall auf eine beliebige Schaltfläche im Panel klickt, empfängt das zugehörige Listener-Objekt ein ActionEvent-Objekt, das angibt, dass auf eine Schaltfläche geklickt wurde. Im Beispielprogramm ändert das Listener-Objekt die Hintergrundfarbe des Panels.
Bevor wir demonstrieren, wie man auf Schaltflächenklickereignisse hört, müssen wir zunächst erklären, wie Schaltflächen erstellt und zum Bedienfeld hinzugefügt werden.
Eine Schaltfläche kann durch Angabe einer Beschriftungszeichenfolge, eines Symbols oder beider im Schaltflächenkonstruktor erstellt werden. Hier sind zwei Beispiele:
JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton(new ImageIcon("blue-ball.gif"));
Das Hinzufügen einer Schaltfläche zu einem Panel erfordert den Aufruf der Add-Methode:
JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton("Blue"); JButton redButton = new JButton("Red"); buttonPanel.add(yellowButton); buttonPanel.add(blueButton); buttonPanel.add(redButton);
An diesem Punkt wissen Sie, wie Sie Schaltflächen zum Bedienfeld hinzufügen. Als Nächstes müssen Sie den Code hinzufügen, der es dem Bedienfeld ermöglicht, auf diese Schaltflächen zu hören. Hierzu ist eine Klasse erforderlich, die die ActionListener-Schnittstelle implementiert. Wie bereits erwähnt, sollten Sie eine actionPerformed-Methode mit der Signatur einschließen:
public void actionPerformed(ActionEvent event)
Wenn auf die Schaltfläche geklickt wird, möchten Sie die Hintergrundfarbe des Bedienfelds festlegen die angegebene Farbe. Diese Farbe wird in der Listener-Klasse gespeichert:
class ColorAction implements ActionListener { public ColorAction(Color c) { backgroundColor = c; } public void actionPerformed(actionEvent event) { //set panel background color } private Color backgroundColor; }
Erstellen Sie dann ein Objekt für jede Farbe und legen Sie diese Objekte als Schaltflächen-Listener fest.
ColorAction yelloAction = new ColorAction(Color.YELLOW); ColorAction blueAction = new ColorAction(Color.BLUE); ColorAction redAction = new ColorAction(Color.RED); yellowButton.addActionListener(yellowAction); blueButton.addActionListener(blueAction); redButton.addActionListener(redAction);
Wenn ein Benutzer beispielsweise auf die Schaltfläche mit der Bezeichnung „Gelb“ klickt, wird die actionPerformed-Methode des yellowAction-Objekts aufgerufen. Das Instanzfeld „backgroundColor“ dieses Objekts ist auf „Color.YELLOW“ gesetzt. Stellen Sie nun die Hintergrundfarbe des Panels auf „Gelb“ ein.
Hier gibt es noch ein weiteres Problem zu berücksichtigen. ColorAction-Objekte können nicht auf Buttonpanel-Variablen zugreifen. Dieses Problem kann auf zwei Arten gelöst werden. Eine besteht darin, das Panel im ColorAction-Objekt zu speichern und im Konstruktor von ColorAction festzulegen. Die andere besteht darin, ColorAction zu einer inneren Klasse der ButtonPanel-Klasse zu machen, sodass ihre Methoden automatisch Zugriff auf das externe Panel haben.
Im Folgenden wird erläutert, wie die ColorAction-Klasse innerhalb der ButtonFrame-Klasse platziert wird.
class ButtonFrame extends JFrame { ... private class ColorAction implents ActionListener { ... public void actionPerformed(ActionEvent event) { buttonPanel.setBackground(backgroundColor); } private Color backgroundColor; } private Jpanel buttonPanel; }
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Java-Methode zur Behandlung von Schaltflächenklickereignissen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!