Video: Sailing, Brevik Norway 2018 2025
Her er store nyheter! I Java kan du definere en klasse inne i en annen klasse! Her inneholder klassen
GameFrame
en klasse som heter
MyActionListener
.
importer java. AWT. FlowLayout;
importer java. AWT. begivenhet. Actione;
importer java. AWT. begivenhet. Action;
importer java. util. Tilfeldig;
importer javax. svinge. JButton;
import javax. svinge. JFrame;
importer javax. svinge. JLabel;
importer javax. svinge. JTextField;
class GameFrame utvider JFrame {
privat statisk endelig lang serialVersionUID = 1L;
int randomNumber = nytt tilfeldig (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = nytt JTextField (5);
JButton-knapp = ny JButton ("Guess");
JLabel label = nytt JLabel (numGuesses + "guesses");
offentlig GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (new FlowLayout ());
legg (tekstfelt);
legg (knapp);
legg (label);
knapp. addActionListener (ny MyActionListener () );
pakke ();
setVisible (true);
}
klassen MyActionListener implementerer ActionListener {
@Override
public void actionPerformed (ActionEvent e) {
String textFieldText = textField . GetText ();
hvis (Integer. ParseInt (textFieldText) == randomNumber) {
-knappen. setEnabled (false);
tekstfeltet. setText (textField. getText () + "Yes!");
tekstfeltet. setEnabled (false);
} annet {
textField. setText ("");
tekstfeltet. requestFocus ();
}
numGuesses ++;
String guessWord = (numGuesses == 1)? "Gjette": "gjetninger";
etikett. setText (numGuesses + guessWord);
}
}
}
Klassen
MyActionListener
ovenfor er en indre klasse. En indre klasse er mye som alle andre klasser. Men innenfor en indre klasses kode, kan du referere til de vedlagte klassens felter. For eksempel bruker flere setninger i
MyActionListener
navnet
textField
og
textField
i vedlegget
GameFrame
.
Merk at koden ovenfor bruker
MyActionListener
-klassen bare én gang. (Den eneste bruken er i en samtale til
-knappen. AddActionListener
.) Så, trenger du virkelig et navn på noe som bare brukes en gang? Nei, det gjør du ikke. Du kan erstatte hele definisjonen av den indre klassen inne i samtalen til
-knappen.addActionListener
. Når du gjør dette, har du en anonym indre klasse. Slik fungerer det.
importer java. AWT. FlowLayout;
importer java. AWT. begivenhet. Actione;
importer java. AWT. begivenhet. Action;
importer java. util. Tilfeldig;
importer javax. svinge. JButton;
importer javax. svinge. JFrame;
importer javax. svinge. JLabel;
importer javax. svinge. JTextField;
class GameFrame utvider JFrame {
privat statisk endelig lang serialVersionUID = 1L;
int randomNumber = nytt tilfeldig (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = nytt JTextField (5);
JButton button = ny JButton ("Guess");
JLabel label = nytt JLabel (numGuesses + "guesses");
offentlig GameFrame () {
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setLayout (new FlowLayout ());
legg (tekstfelt);
legg (knapp);
legg (label);
knapp. addActionListener (ny ActionListener () {
@Override
offentlig ugyldig handlingPerformert (ActionEvent e) {
String textFieldText = textField. getText ();
hvis (Integer. parseInt (textFieldText) = = randomNumber) {
-knappen. setEnabled (false);
textField. setText (textField. getText () + "Yes!");
textField. setEnabled (false);
} else {< textField. SetText ("");
textField. RequestFocus ();
}
numGuesses ++;
String guessWord = (numGuesses == 1)? "Gjetning": "gjetninger"; < label. SetText (numGuesses + guessWord);
}
}
);
pakke (); setVisible (true);
}
}
Inner klasser er gode for ting som hendelseshåndterere, som for eksempel
actionPerformed
metoden. Det vanskeligste med en
anonym
indre klasse holder styr på parentesene, de krøllete båndene og innrykket. Noen ydmyke råd: begynn å skrive kode uten noen indre klasser. Senere, når du blir lei av vanlige Java-klasser, eksperimentere ved å bytte noen av dine vanlige klasser til indre klasser.
