1. Ereignisüberwachung
Testcode 1:
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. }} class myFrameTextField erweitert den Bild {MyFramETextField () {textfield tf = new textField (); add (tf); tf.AddactionListener (neuer Monitor3 ()); tf.setechochochar ('*'); / * * * Mit dieser Methode setEchooChar () wird die angezeigten Zeichen festgelegt, die beim Eingeben in das Textfeld angezeigt werden. Hier ist es auf *festgelegt, so dass jeder Eingabinhalt als *angezeigt wird, aber Sie können den Eingabeinhalt beim Ausdrucken */ setvisible (true) immer noch sehen. Pack(); }} class monitor3 implementiert actionListener { / * * Alle Methoden in der Schnittstelle sind öffentlich (öffentlich) * Wenn Sie also void actionPerformed (actionEvent e) aus dem API -Dokument kopieren, müssen Sie öffentlich vor der Void addieren Die relevanten Informationen des Ereignisses können durch die relevanten Methoden des Objekts E*/ Textfield tf = (textfield) e.getSource () erhalten werden; / * * Getource () -Methode besteht darin, die Ereignisquelle zu erhalten. Hinweis: Wenn Sie diese Ereignisquelle erhalten, behandeln Sie sie als übergeordnete Textfield -Klasse. Die Definition der GetSource () -Methode lautet: "Public Object Getource ()" Rückgabewert ist ein Objektobjekt *, also müssen Sie es an ein Objekt vom Typ Textfeld * geben, wenn Sie auf das Ereignisquellenobjekt einer anderen Klasse in einer Klasse zugreifen möchten. tf.setText (""); // Löschen Sie den Inhalt im Textfeld}} Testcode 2:
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. Taste btn1 = neue Taste ("start"); Taste btn2 = neue Taste ("Stop"); Monitor2 M2 = new Monitor2 (); // Erstellen Sie das Hörobjekt btn1.addactionListener (M2); /*Ein Hörobjekt hört die Aktionen von zwei Schaltflächen gleichzeitig an*/ btn2.addactionListener (M2); BTN2.SETACTACTCOMMAND ("GAMEOVER"); // Setzen Sie die Rückgabeinformationen, nachdem Sie den Befehl click von btn2 f.add (btn1, borderLayout.north) ausgestellt haben; F.Add (Btn2, BorderLayout.Center); f.pack (); f.setvisible (true); }} class monitor2 implementiert actionListener {public void actionPerformed (actionEvent e) {System.out.println ("Eine Schaltfläche wurde gedrückt,"+"Die relativen Infos lautet:/n"+e.getActionCommand ()); /* Verwenden Sie das zurückgegebene Hörobjekt E, um die Methode getActionCommand () aufzurufen, um die Rückgabeinformationen zu erhalten, nachdem die beiden Schaltflächen den Befehl klicken. Nach den verschiedenen Rückgabeinformationen ist welche Schaltfläche der aktuelle Vorgang ist. BTN1 verwendet nicht die SetActaceCommand () -Methode zum Festlegen.2. Textfield -Ereignisüberwachung
Testcode:
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. }} class myFrameTextField erweitert den Bild {MyFramETextField () {textfield tf = new textField (); add (tf); tf.AddactionListener (neuer Monitor3 ()); tf.setechochochar ('*'); / * * * Mit dieser Methode setEchooChar () wird die angezeigten Zeichen festgelegt, die beim Eingeben in das Textfeld angezeigt werden. Hier ist es auf *festgelegt, so dass jeder Eingabinhalt als *angezeigt wird, aber Sie können den Eingabeinhalt beim Ausdrucken */ setvisible (true) immer noch sehen. Pack(); }} class monitor3 implementiert actionListener { / * * Alle Methoden in der Schnittstelle sind öffentlich (öffentlich) * Wenn Sie also void actionPerformed (actionEvent e) aus dem API -Dokument kopieren, müssen Sie öffentlich vor der Void addieren Die relevanten Informationen des Ereignisses können durch die relevanten Methoden des Objekts E*/ Textfield tf = (textfield) e.getSource () erhalten werden; / * * Getource () -Methode besteht darin, die Ereignisquelle zu erhalten. Hinweis: Wenn Sie diese Ereignisquelle erhalten, behandeln Sie sie als übergeordnete Textfield -Klasse. Die Definition der GetSource () -Methode lautet: "Public Object Getource ()" Rückgabewert ist ein Objektobjekt *, also müssen Sie es an ein Objekt vom Typ Textfeld * geben, wenn Sie auf das Ereignisquellenobjekt einer anderen Klasse in einer Klasse zugreifen möchten. tf.setText (""); // Löschen Sie den Inhalt im Textfeld}} Implementierung eines einfachen Taschenrechners mithilfe der Textfeldklasse
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. }}/* Hier wird hauptsächlich das Layout der Taschenrechnerelemente abgeschlossen*/class Tfframe erweitert Frame {tfframe () {/** 3 Textfelder erstellen und geben ihre Anfangsgrößen auf 10 Zeichen bzw. 15 Zeichen an. Hier ist eine weitere Baumethode des öffentlichen Textfelds der Textfeldklasse (int -Spalten) */ Textfield Num1 = neues Textfeld (10); TextField Num2 = neues Textfeld (10); TextField Num3 = neues Textfeld (15); /* Erstellen Sie eine gleiche Schaltfläche gleicher Zeichen*/ Schaltfläche btnequal = new Button ("="); btnequal.addactionListener (neuer MyMonitor (Num1, Num2, Num3)); /* Fügen Sie einen Listener zur Schaltfläche Gleicher Zeichen hinzu, damit ein Antwortereignis nach dem Klicken auf die Schaltfläche*/ Label lblPlus = new Label ("+") auftritt. /* "+" ist ein statischer Text. Verwenden Sie daher die Beschriftungsklasse, um ein statisches Textobjekt*/ setLayout (neuer FlowLayout ()) zu erstellen. /* Ändern Sie das Standard -BorderLayout -Layout von Frame in FlowLayout -Layout*/ add (num1); add (lblPlus); add (num2); add (btnequal); add (num3); Pack(); setvisible (wahr); }} class myMonitor implementiert actionListener {textfield num1, num2, num3; / * * Um das Anhören von Schaltflächen an Textfeldern zu ermöglichen, werden daher drei Textfeldobjekte in der benutzerdefinierten Klasse MyMonitor in Num1, Num2, Num3, * definiert, auch eine Konstruktormethode der MyMonitor -Klasse. Diese Konstruktormethode enthält drei Parameter des Textfeldtyps *, um drei Parameter des Textfeldtyps zu empfangen, die aus der TFFRame -Klasse übergeben wurden Dann verarbeiten Sie Num1, Num2, Num3 in der actionPerformed () -Methode */ public MyMonitor (TextField Num1, TextField Num2, TextField Num3) {this.num1 = num1; this.num2 = num2; this.num3 = num3; } public void actionperformed (actionEvent e) { /* Die relevanten Informationen des Ereignisses sind in Objekt e verkapuliert. Die relevanten Informationen des Ereignisses können durch die relevanten Methoden des Objekts E*/ int n1 = Integer.ParseInt (num1.getText ()) erhalten werden. + (n1 + n2));/* Num3 -Objekt ruft die methode setText () auf, um ihren eigenen Anzeigetext*/ num1.setText ("") festzulegen; / * Löschen Sie nach Abschluss der Berechnung den Inhalt der Textfelder Num1 und Num2 */ num2.setText (""); // num3.setText (string.Valueof ((n1+n2))); /* Wenn Zeichenfolgen mit "+" mit einer beliebigen Art von Daten verbunden sind, muss die Zeichenfolge eine Zeichenfolge sein. * Hier ist eine leere Zeichenfolge und eine Int -Typ -Nummer, so dass die durch (N1+N2) erhaltene Int -Typ -Nummer direkt in eine Zeichenfolge konvertiert werden kann. * Dies ist ein kleiner Trick, um andere grundlegende Datentypen in Zeichenfolgen umzuwandeln. * Sie können auch "String.Valueof ((n1+n2))" verwenden, um die Summe von (n1+n2) in eine Zeichenfolge zu konvertieren */}} Klassische Verwendung in Java: Verweise auf eine andere Klasse in einer Klasse halten
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. /* Erstellen Sie das TTMyFrame -Objekt und rufen Sie die Methode lauchframe () auf, um den Taschenrechnerformular anzuzeigen public void launchframe () {num1 = neues Textfeld (10); Num2 = neues Textfeld (15); Num3 = neues Textfeld (15); Label lblPlus = new Label ("+"); Button btnequal = new button ("="); btnequal.addactionListener (New MyMonitorBtNequal (this)); setLayout (neuer FlowLayout ()); add (num1); add (lblPlus); add (num2); add (btnequal); add (num3); Pack(); setvisible (wahr); }}/ * * Hier, indem Sie einen Verweis auf die TTMyFrame -Klasse erhalten und dann diesen Hinweis verwenden, um auf die Mitgliedsvariablen in der TTMyFrame -Klasse zuzugreifen. * Dieses Objekt der TTMyFrame -Klasse ist wie ein großer Haushälterin, und ich sagte der großen Haushälterin, dass ich auf die Mitgliedsvariablen in der TTMyFrame -Klasse zugreifen möchte, * die Referenz des großen Haushälterers hilft mir dabei, es zu finden, und ich muss es nicht mehr selbst finden. * Diese Verwendung von Verweisen auf eine andere Klasse in einer Klasse ist eine sehr typische Verwendung* Verwenden Sie den erhaltenen Verweis, um auf alle Mitglieder einer anderen Klasse in einer Klasse zuzugreifen public MyMonitorBtNequal (ttmyframe ttmf) {this.ttmf = ttmf; } public void actionperformed (actionEvent e) {int n1 = integer.parseInt (ttmf.num1.getText ()); int n2 = integer.parseInt (ttmf.num2.Getext ()); ttmf.num3.setText ("" + (n1 + n2)); ttmf.num1.setText (""); ttmf.num2.setText (""); }}Die Betriebsergebnisse sind wie folgt:
III. Interne Klasse
Beispiele für interne Klassen:
Paket cn.javastudy.summary; import Java.awt.*; import Java.awt.event. }} class myMathframe erweitert den Bild {textfield num1, num2, num3; public void launchframe () {num1 = neues Textfeld (10); Num2 = neues Textfeld (15); Num3 = neues Textfeld (15); Label lblPlus = new Label ("+"); Button btnequal = new button ("="); btnequal.addactionListener (new MyMonitor ()); setLayout (neuer FlowLayout ()); add (num1); add (lblPlus); add (num2); add (btnequal); add (num3); Pack(); setvisible (wahr); } /** Diese MyMonitor -Klasse ist eine innere Klasse, die die MyFrame -Klasse in der MyFrame -Klasse definiert, die als Wrapper -Klasse bezeichnet wird (externe Klasse),* Sie können in MyMonitor (innere Klasse) direkt darauf zugreifen. Dies entspricht standardmäßig dem internen Klassenobjekt. int n2 = integer.parseInt (num2.getText ()); num3.setText ("" + (n1 + n2)); num1.setText (""); num2.setText (""); }}}Die enormen Vorteile von internen Klassen sind:
4. Grafik
Testcode:
Paket cn.javastudy.summary; import Java.awt.*; public class testpaint {public static void main (String args []) {new mypaint (). launchFrame (); /*Die Methode der Farbe (Grafik G) wird in der Main () -Methode nicht angezeigt, aber nach dem Erstellen des Frame -Formulars sehen Sie, dass Kreise und Rechtecke auf der Bildformform gezeichnet werden. Dies liegt daran, dass die Paint () -Methode eine spezielle Methode ist. Es wird automatisch implizit beim Erstellen des Frame -Formulars aufgerufen. Wenn wir das Rahmenformular minimieren und erneut öffnen, rufen wir die Paint () -Methode erneut auf und zeichnen die Kreise und Rechtecke auf der Rahmenform. Das heißt, jedes Mal, wenn wir das Frame -Formular neu streichen müssen, wird die Methode Paint () automatisch*/}} Klasse MyPaint erweitert Frame {public void launchFrame () {setbounds (200.200.640,480); setvisible (wahr); } public void Paint (Grafik g) { / *Paint (Grafik G) Methode hat einen Parameter G -Typen -Typ. Wir können diesen G als Maler behandeln, der Maler hält einen Pinsel in der Hand und wir zeichnen die verschiedenen Bilder, die wir wollen, indem wir die Farbe und Form des Pinsels einstellen * / / *die Farbe des Pinsels * / g.setcolor (rot.Red.Red) setzen; G.Filloval (100.100.100.100);/*Zeichnen Sie eine feste Ellipse*/ G.SetColor (color.green); G.FillRect (150.200.200);/*Zeichnen Sie ein solides Rechteck*//*Die beiden folgenden Codezeilen sind für gute Programmiergewohnheiten geschrieben, um Programme zu schreiben. Jetzt sollten Sie die anfängliche Farbe des Pinsels wiederherstellen, was der Reinigung der Farbe auf dem Pinsel entspricht, nachdem der Maler die Pinsel*/ Farbe c = g.getColor () verwendet hat. G.SetColor (c); }}Auslaufergebnisse:
5. Mausereignisadapter
Testcode:
Paket cn.galc.test; import java.awt.*; import Java.awt.event. }} class myFrame erweitert Frame {ArrayList points = null; MyFrame (String S) {Super (s); Punkte = new ArrayList (); setLayout (null); Setbounds (300.300.400.300); this.Setbackground (neue Farbe (204, 204,255)); setvisible (wahr); this.addmouselistener (neuer Monitor ()); } public void Paint (Grafik g) {iterator i = points.iterator (); while (i.hasnext ()) {Punkt p = (Punkt) I.Next (); G.SetColor (color.Blue); G.Filloval (PX, Py, 10,10); }} public void addpoint (Punkt p) {points.add (p); }} Class Monitor erweitert Mouseadapter {public void mousePressed (mouseEvent e) {MyFrame f = (MyFrame) e.getSource (); F.Addpoint (neuer Punkt (e.getX (), E.gety ()); f.Repaint (); }}6. Windows -Ereignis
Testcode:
Paket cn.galc.test; import java.awt.*; import Java.awt.event. }} class WindowFrame erweitert Frame {public windowframe (string s) {super (s); Setbounds (200.200.400.300); setLayout (null); SetBackground (neue Farbe (204,204,255)); setvisible (wahr); this.addwindowlistener (neuer WindowMonitor ());/*Hören Sie sich die Aktionen dieser Form an, verkapulieren Sie alle Aktionsinformationen in ein Objekt und geben Sie sie in die Hörklasse ein*/this.addwindowlistener (/*Definieren Sie eine Klasse in einer Methode, diese Klasse, die als lokaler Klasse bezeichnet wird. Anonyme Klasse als Fensteradapterklasse. System.exit (-1); } /*Die Hörklasse ist auch als interne Klasse definiert* /Klasse WindowMonitor erweitert das Fensteradapter { /*Fensteradapter (Fensteradapter) Klasse implementiert die Fensterlistener -Hörschnittstelle. Schreiben Sie alle Methoden in der Fensterlistener -Schnittstelle neu. Wenn Sie direkt die benutzerdefinierte WindowMonitor -Klasse verwenden, um die Fensterlistener -Schnittstelle direkt zu implementieren, müssen Sie alle Methoden in der Fensterlistener -Schnittstelle neu schreiben. Aber jetzt müssen Sie nur noch eine dieser Methoden verwenden. Daher können Sie eine Unterklasse der Fensterlistener -Hörschnittstelle erben und die Methode, die Sie in dieser Unterklasse verwenden, umschreiben. Diese Methode ist viel einfacher und bequemer als die direkte Implementierung der Fensterlistener -Höroberfläche. */*Schreiben Sie die Methode für WindowsClosining (WindowEvent e) neu, die verwendet werden muss7. Tastatur -Antwortereignis - KeyEvent
Testcode:
Paket cn.galc.test; import java.awt.*; import Java.awt.event. }} class KeyFrame erweitert Frame {public keyframe (string s) {super (s); Setbounds (200.200.400.300); setLayout (null); setvisible (wahr); AddKeyListener (neuer Keymonitor ()); } /*Definieren Sie die benutzerdefinierte Tastatur -Hörklasse als interne Klasse. Diese Hörklasse erbt aus der Schlüsseladapterklasse der Tastaturadapter. Erben aus der Keyadapter -Klasse. Um prägnant und bequem zu sein, müssen Sie nur die Methoden, die Sie verwenden, umschreiben. Diese Methode ist einfacher und bequemer als die direkte Implementierung der KeyListener -Schnittstelle. Wenn Sie die Schnittstelle von KeynListener direkt implementieren, müssen Sie alle Methoden in der Schnittstelle von KeyListener umschreiben, aber es wird wirklich nur eine Methode verwendet. Auf diese Weise wird das Umschreiben anderer Methoden, aber nicht verwendet, werden zwangsläufig nutzlose Arbeiten bewirken. /*Verwenden Sie GetKeyCode () -Methode, um den virtuellen Code des Schlüssels zu erhalten Jede Taste in der Tastatur entspricht einem virtuellen Code. Diese virtuellen Codes werden als statische Konstanten in der KeyEvent -Klasse definiert. Daher können Sie die Form von "Klasse name.static Constant Name" verwenden, um auf diese statischen Konstanten zuzugreifen }}}}/*Die Tastatur übernimmt solche Ereignisse: Jede Taste entspricht einem virtuellen Code. Wenn eine bestimmte Taste gedrückt wird, findet das System den virtuellen Code, der dieser Taste entspricht, um festzustellen, welche Taste derzeit gedrückt wird*/Durch diesen Artikel habe ich GUI -Programmierung mit Ihnen gelernt. Ich hoffe, Sie werden ein umfassenderes Verständnis der GUI -Programmierung haben. Es gibt mehr als das über GUI -Programmierung, und Sie müssen weiter lernen.