Video: Erste eigene Klasse - Objektorientierte Programmierung in Java Teil 2 ● Gehe auf SIMPLECLUB.DE/GO 2024
Hier sind große Neuigkeiten! In Java können Sie eine Klasse innerhalb einer anderen Klasse definieren! Hier enthält die
GameFrame
-Klasse eine Klasse mit dem Namen
MyActionListener
.
importiert Java. awt. FlowLayout;
importiert Java. awt. Veranstaltung. ActionEvent;
importiert Java. awt. Veranstaltung. Aktionslistener;
importiert Java. Nutz. Zufällig;
javax importieren. Swing. JButton;
javax importieren. Swing. JFrame;
javax importieren. Swing. JLabel;
javax importieren. Swing. JTextFeld;
Klasse GameFrame erweitert JFrame {
private static final long serialVersionUID = 1L;
int randomNumber = neuer Zufall (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = neues JTextField (5);
JButton-Taste = neuer JButton ("Guess");
JLabel label = neues JLabel (numGuesses + "erraten");
public GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (neues FlowLayout ());
add (Textfeld);
hinzufügen (Schaltfläche);
hinzufügen (beschriften);
-Taste. addActionListener (neuer MyActionListener () );
pack ();
setVisible (wahr);
}
class MyActionListener implementiert ActionListener {
@Override
public void actionPerformed (ActionEvent e) {
String textFieldText = textField . getText ();
if (Ganzzahl. ParseInt (textFieldText) == Zufallszahl) {
Schaltfläche. setEnabled (falsch);
Textfeld. setText (textField. getText () + "Ja!");
Textfeld. setEnabled (falsch);
} else {
Textfeld. Text setzen("");
Textfeld. requestFocus ();
}
numGuesses ++;
String guessWord = (numGuesses == 1)? "Erraten": "erraten";
Etikett. setText (numGuesses + guessWord);
}
}
}
Die
MyActionListener
Klasse oben ist eine innere Klasse. Eine innere Klasse ist einer anderen Klasse sehr ähnlich. Innerhalb des Codes einer inneren Klasse können Sie jedoch auf die Felder der umschließenden Klasse verweisen. Zum Beispiel verwenden mehrere Anweisungen in
MyActionListener
den Namen
textField
, und
textField
ist in der umschließenden
GameFrame
-Klasse definiert.
Beachten Sie, dass der obige Code die Klasse
MyActionListener
nur einmal verwendet. (Die einzige Verwendung ist in einem Aufruf von
. AddActionListener
.) Brauchen Sie wirklich einen Namen für etwas, das nur einmal verwendet wird? Nein, tust du nicht. Sie können die gesamte Definition der inneren Klasse innerhalb des Aufrufs der
-Schaltfläche ersetzen.addActionListener
. Wenn Sie dies tun, haben Sie eine anonyme innere Klasse. So funktioniert es.
importiert Java. awt. FlowLayout;
importiert Java. awt. Veranstaltung. ActionEvent;
importiert Java. awt. Veranstaltung. Aktionslistener;
importiert Java. Nutz. Zufällig;
javax importieren. Swing. JButton;
javax importieren. Swing. JFrame;
javax importieren. Swing. JLabel;
javax importieren. Swing. JTextFeld;
Klasse GameFrame erweitert JFrame {
private static final long serialVersionUID = 1L;
int randomNumber = neuer Zufall (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = neues JTextField (5);
JButton-Taste = neuer JButton ("Guess");
JLabel label = neues JLabel (numGuesses + "erraten");
public GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (neues FlowLayout ());
add (Textfeld);
hinzufügen (Schaltfläche);
hinzufügen (beschriften);
-Taste. addActionListener (new ActionListener () {
@Override
public void actionPerformed (ActionEvent e) {
Zeichenfolge textFieldText = textField. getText ();
if (Ganzzahl. parseInt (textFieldText) = = randomNumber) {
button. setEnabled (false);
textField. setText (textField. getText () + "Ja!");
textField. setEnabled (false);
} else {< textField.setText ("");
textField. RequestFocus ();
}
numGuesses ++;
Zeichenkette guessWord = (numGuesses == 1)? "Guess": "raten"; label.setText (numGuesses + guessWord);
}
}
);
pack (); setVisible (wahr);
}
}
Innere Klassen eignen sich gut für Dinge wie Event-Handler, wie die
actionPerformed
-Methode. Das Schwierigste an einer
anonymen
inneren Klasse ist es, die Klammern, die geschweiften Klammern und die Einrückung zu verfolgen. Einige bescheidene Ratschläge: Beginnen Sie mit dem Schreiben von Code ohne innere Klassen. Wenn Sie später mit gewöhnlichen Java-Klassen gelangweilt sind, experimentieren Sie, indem Sie einige Ihrer normalen Klassen in innere Klassen umwandeln.