Buttons und Aktion Hörer, Erstellen von Fenster-Schnittstellen mithilfe Swing-Objekte, InformIT

Buttons und Action-Hörer

Bisher haben die GUIs wir produziert haben mit Swing haben keine Aktionen enthalten. Sie saßen nur da und angezeigt einen Text. Die einzige Aktion, die sie war wegnahm, um Sie auf die Close-Fenster-Taste als Antwort zu gehen. In diesem Abschnitt beginnen wir Ihnen zu zeigen, wie GUIs zu entwerfen, die Dinge wie das Ändern Farbe tun, ändernden Text oder einige kompliziertere Aktionen. Ein Knopf ist einfach eine Komponente in einer GUI, die wie eine Schaltfläche aussieht und dass etwas tut, wenn Sie es mit der Maus klicken. Sie legen Tasten in einer Weise, die sehr ähnlich ist, wie Sie Etiketten erstellen. Sie fügen Tasten zu einem JFrame in der gleichen Weise, dass Sie Etiketten zu einem JFrame hinzufügen. aber es ist auch etwas ganz Neues über Tasten. Sie können eine Aktion mit einer Taste zugeordnet werden, so dass, wenn der Benutzer auf die Schaltfläche mit der Maus klickt, die GUI eine Aktion ausführt. Ein Beispiel soll die Einzelheiten klar machen.

Programmierbeispiel: Hinzufügen von Buttons

Display 12 # 151; GBO mit Knöpfen Hinzugefügt

Vieles von dem, was in Anzeige erscheint 12 ist bereits bekannt vorkommen. Die Klasse ButtonDemo ist eine abgeleitete Klasse von der Klasse JFrame und so ist es ein Fenster-Interface ähnlich wie die, die wir bereits in diesem Artikel gesehen haben. Ein Fenster Zuhörer der Klasse WindowDestroyer ist, wie in der vorhergehenden Beispielen mit der Methode addWindowListener hinzugefügt. Die Größe eingestellt ist, und die Inhaltsfenster erhalten wird, mit getContentPane wie in den vorherigen Beispielen. Wir verwenden einen Layout-Manager, wie wir im vorherigen Beispiel (Display 10) haben, obwohl wir diesmal die Flowmanager-Klasse.

Eine Schaltfläche ist eine GUI-Komponente, die wie eine Schaltfläche aussieht, und das kann etwas tun, wenn Sie es mit der Maus klicken. In diesem Abschnitt wir sagen Ihnen, wie Tasten, um Ihre GUI hinzuzufügen. Im nächsten Abschnitt erklären wir Ihnen, wie Sie angeben, was passiert, wenn die Schaltfläche geklickt wird.

Ein Button-Objekt wird in der gleichen Art und Weise erstellt, dass jedes andere Objekt wird erstellt, aber Sie verwenden die Klasse JButton, wenn Sie Tasten möchten. Beispielsweise erstellt das folgende Beispiel aus Display 12 eine Taste:

Das Argument für das Konstrukt, in diesem Fall „Rot“. ist eine Zeichenfolge, die auf der Schaltfläche geschrieben werden, wenn die Schaltfläche angezeigt wird. Das String-Argument an den Konstruktor, in diesem Beispiel „Red“. gibt die Zeichenfolge, die auf der Schaltfläche angezeigt werden, wenn es auf dem Bildschirm angezeigt wird. Wenn Sie an der GUI Anzeige sehen 12, werden Sie sehen, dass die beiden Tasten gekennzeichnet sind „Rot“ und „Grün“.

Der Button ist mit dem folgenden Inhaltsfenster hinzugefügt:

Es gibt kein zweites Argument die Methode hinzufügen, weil wir die Flowmanager-Klasse verwenden. Wenn wir stattdessen die Bordermanager-Klasse verwendet hätten, dann würden wir ein zweites Argument, wie BorderLayout.NORTH verwendet haben.

Im nächsten Abschnitt erläutern wir die Linien von Display 12 Einbeziehung der Methode addActionListener.

Aktion Hörer und Action-Events

Wenn Sie eine Schaltfläche mit der Maus klicken (oder ein anderes Element in einer GUI aktivieren), erzeugt es ein als ein Ereignis bekannt Objekt und sendet das Objekt auf ein anderes Objekt (oder Objekte) als Zuhörer bekannt. Dies nennt man das Ereignis zu feuern. Der Zuhörer führt dann eine Aktion. Wenn wir sagen, dass das Ereignis an das Listener-Objekt „gesendet“, was uns wirklich bedeuten, dass einige Verfahren im Listener-Objekt mit dem Event-Objekt als Argument aufgerufen werden. Dieser Aufruf erfolgt automatisch. Ihre Swing-GUI-Klassendefinition wird normalerweise nicht einen Aufruf dieser Methode enthält. Allerdings ist Ihre Swing-GUI-Klassendefinition müssen zwei Dinge tun: Erstens für jede Taste, muss er angeben, welche Objekt (e) sind Zuhörer, die von dieser Taste abgefeuert auf Ereignisse reagieren wird; das nennt man den Hörer Registrierung. Zweitens Ihre GUI Klassendefinition (en) müssen auch die Methode (n) definieren, die aufgerufen wird, wenn das Ereignis an den Hörer gesendet wird. Beachten Sie, dass diese Methoden werden von Ihnen definiert werden, aber unter normalen Umständen, werden Sie nie einen Aufruf dieser Methoden schreiben. Die Anrufungen erfolgt automatisch.

Die folgende Zeile von Display 12

registriert dies als Zuhörer Ereignisse aus der Schaltfläche mit dem Namen stopbutton zu empfangen. Eine ähnliche Anweisung registriert dies auch als Zuhörer Ereignisse aus der Schaltfläche mit dem Namen goButton zu empfangen. Da das Argument ist dies. es bedeutet, dass diese (die Klasse ButtonDemo selbst) der Hörer Klasse. Daran erinnern, dass in der Definition einer Klasse, ein Objekt dieser Klasse diese aufgerufen wird. Die Klasse ButtonDemo selbst ist die Listener-Klasse für die Schaltflächen innerhalb von ButtonDemo. (Um etwas genauer zu sein, bedeutet dies, dass jedes Objekt der Klasse ButtonDemo ist der Hörer für die Schaltflächen in diesem Objekt.) Als nächstes wird erklärt, wie eine Klasse zu machen, wie ButtonDemo. in eine Listener-Klasse für durch Tasten ausgelösten Ereignisse.

Verschiedene Arten von Komponenten erfordern unterschiedliche Arten von Listener-Klassen, die Ereignisse behandeln sie feuern. Eine Taste löst Ereignisse als Aktion Ereignisse bekannt, die von den Hörern als Aktion Hörer bekannt behandelt werden.

Eine Aktion Zuhörer ist ein Objekt vom Typ Action. Action ist keine Klasse, sondern ist eine Eigenschaft, die Sie jede Klasse geben können Sie festlegen. (Diese Eigenschaften, wie Action. Werden als Schnittstellen bezeichnet.) Um eine Klasse in eine Action zu machen. Sie müssen zwei Dinge tun:

Sie fügen den Begriff implementsActionListener zu Beginn der Klassendefinition, in der Regel am Ende der ersten Zeile.

Sie definieren eine Methode namens actionPerformed.

Wir könnten eine eigene Klasse definiert, die nichts tat, aber Schaltfläche Ereignisse behandeln, aber es # 's bequemer, die Fensterklasse ButtonDemo in den Aktions-Listener zu machen, die Schaltfläche Ereignisse behandelt. Dies ist praktisch, weil die Schaltfläche Ereignisse sollen das Fenster ändern, und der einfachste Weg, ein Fenster ist selbst durch ein Verfahren innerhalb des Fensters zu ändern.

Nun nehmen wir an ein Objekt, buttonGui erstellen. der Klasse ButtonDemo wie folgt:

Der dieser Parameter in der Definition der Klasse ButtonDemo bezieht sich auf buttonGui. So buttonGui ist die Aktion Hörer für die beiden Tasten innerhalb von buttonGui. Also, wenn eine Schaltfläche geklickt wird, kann das Verfahren actionPerformed wird automatisch mit dem Ereignis durch die Taste als Argument für actionPerformed gefeuert aufgerufen. Alles, was zu erklären bleibt, ist, wie die Methode funktioniert actionPerformed. Lassen Sie # 's mit unserem Objekt buttonGui der Klasse ButtonDemo fortzusetzen.

Wenn Sie innerhalb von buttonGui mit der Maus auf eine der Schaltflächen klicken, dass sendet eine Aktion Ereignis an die Aktion Hörer für diese Schaltfläche. Aber buttonGui ist die Aktion Hörer für die Schaltflächen in buttonGui. so das Aktionsereignis geht an buttonGui. Wenn eine Aktion eine Aktion Zuhörer Ereignis empfängt, wird das Ereignis der Methode actionPerformed automatisch weitergegeben. Das Verfahren actionPerformed ist typischerweise eine Verzweigung-Anweisung, die das Ereignis Art von Aktion bestimmt gefeuert wurde, und führt dann eine entsprechende Aktion aus. Lassen Sie # 's Blick auf den Code für die in der Klasse ButtonDemo in Display-Methode actionPerformed 12. Der Einfachheit halber reproduzieren wir die Definition in dem, was folgt:

In diesem Fall ActionPerformed das Verfahren muss wissen, ob die Aktion Ereignis vom Button kam mit „Red“ oder der Schaltfläche mit der Bezeichnung „Green“. Wenn e eine Aktion Ereignis, das durch Klicken auf eine Schaltfläche gefeuert wurde, dann e.getActionCommand () gibt die Zeichenfolge auf der Schaltfläche geschrieben; in diesem Fall gibt es entweder „Rot“ oder „Grün“. Also, alles, was die Methode actionPerformed tun muss, ist zu sehen, ob e.getActionCommand () ist „Rot“ oder „Grün“ und führen Sie die entsprechende Aktion für diese Schaltfläche. Beachten Sie, dass e.getActionCommand () ein Objekt der Klasse String ist. Die Klasse String hat ein Verfahren entspricht, die verwendet werden können, um zu überprüfen, um zu sehen, ob e.getActionCommand () gleich „Rot“ oder „Green“ (oder einen anderen String). Der Methodenaufruf

true zurück, wenn e.getActionCommand () an die String_Argument gleich ist. und gibt andernfalls false. Somit werden die folgenden Code-Tests zu sehen, ob e.getActionCommand () gleich „Rot“ oder „Grün“ und ändert die Farbe der GUI entsprechend:

Die abschließende else-Klausel sollte niemals ausgeführt werden müssen. Es ist einfach da, so dass wir eine Warnung erhalten würden, wenn wir etwas unbemerkt Fehler im Code.

Gotcha: Ändern der Parameterliste für actionPerformed

Wenn Sie eine Klasse in eine Aktion Hörer machen, wird der Header für die Methode actionPerformed für Sie bestimmt. Es muss genau einen Parameter haben, und dass Parameter des Typs Action sein muss. wie im Folgenden:

Wenn Sie den Typ des Parameters ändern oder wenn Sie addiert (oder subtrahiert) einen Parameter, werden Sie keine korrekte Definition einer Aktion Zuhörer gegeben haben. (Obwohl es eher fraglich Stil wäre, können Sie den Namen der Methode überlasten actionPerformed, so dass Sie mehrere Versionen der Methode actionPerformed haben. Jeweils mit einer anderen Parameterliste. Aber nur die oben gezeigt ist, hat nichts mit der Herstellung einer Klasse in eine Aktion zu tun Hörer.)

Das einzige, was Sie ist der Name des Parameters e ändern kann, weil es nur ein „Platzhalter“. So ist die folgende Änderung akzeptabel:

Natürlich, wenn Sie diese Änderung vornehmen, dann im Inneren des Körpers des Verfahrens actionPerformed. Sie werden die Kennung theEvent anstelle der Kennung e verwenden.

Programmierung Tipp: Code suchen und Aktionen Getrennt

Sie können in zwei Hauptteile zu schreiben den Code für einen Swing-GUI vereinfachen: Codierung, was die GUI wie auf dem Bildschirm sehen und Codierung die Aktionen der GUI. Betrachten wir zum Beispiel das Programm Anzeige 12. Ihre erste Version dieses Programms könnte die folgende Definition des Verfahrens verwenden actionPerformed:

Mit dieser "do-nothing" Version der Methode actionPerformed. Ihr Programm ausgeführt wird und eine Anzeige auf dem Bildschirm nur in Display-12, wie gezeigt zeigt Wenn Sie nichts drücken geschehen, eine der beiden Farbwechsel Tasten, aber Sie können diese Phase der Codierung Details zur Einstellung verwenden, wie zum Beispiel, welche Taste ist zuerst aufgeführt. (Beachten Sie, dass die Close-Fenster-Taste hat jedoch Arbeit.)

Wenn Sie den Satz implementsActionListener zu Beginn Ihrer JFrame Definition gehören, dann müssen Sie einige Definition der Methode actionPerformed umfassen. Eine „nichts tun“ oder „wenig tun“ Methodendefinition, wie

wird oft ein Stub genannt. Mit Stubs ist eine gute Programmiertechnik in vielen Kontexten nicht nur in Swing-Programmen.

Alternativ kann, wenn die erste Version eines Swing-GUI wie die Anzeige 12 tun, könnten Sie die Definition des Verfahrens auslassen actionPerformed vollständig, sofern Sie auch die Phrase implementsActionListener weglassen und die Beschwörungen von addActionListener weglassen.

Java Tipp: die Methode verwenden setActionCommand

Wenn Sie eine Schaltfläche mit der Maus klicken, feuert es ein Ereignis e als Aktion Veranstaltung bekannt. Das Ereignis e geht normalerweise auf das Verfahren des Aktions Zuhörers actionPerformed (s) für diese Taste. Die Methode actionPerformed, um herauszufinden, was muss Schaltfläche geklickt wurde, wenn es das Ereignis e bekommt. Wenn die Klasse ButtonDemo Anzeige diskutieren 12, sagten wir, dass der Methodenaufruf e.getActionCommand (), um die Zeichenfolge zurück auf die Schaltfläche geschrieben. Das war eine etwas vereinfachte Erklärung. Der Aufruf e.getActionCommand () gibt eine Zeichenfolge als Aktionsbefehl für die Schaltfläche bekannt. Die Standardaktion Befehl ist die Zeichenfolge auf der Schaltfläche geschrieben, aber wenn Sie möchten, können Sie festlegen, dass eine andere Zeichenfolge für eine Schaltfläche die Aktion Befehl sein.

Zum Beispiel in Display 12 haben wir die stopbutton wie folgt:

Wenn wir nichts mehr tun, wird der Aktionsbefehl für die stopbutton „Red“ sein. Allerdings, wenn Sie möchten, können Sie die Aktion Befehl an eine andere Zeichenfolge wie „Stop“ ändern. Sie tun würden, so wie folgt:

Die Methode actionPerformed dann für die Zeichenfolge „Stop“ prüfen würde, anstatt die Zeichenfolge „Red“.

In Verbindung stehende Artikel