Video: NET5 - Pengrajin gendang 2024
Inilah berita besar! Di Jawa, anda boleh menentukan kelas di dalam kelas lain! Di sini, kelas
GameFrame
mengandungi kelas bernama
MyActionListener
.
java import. awt. FlowLayout;
java import. awt. acara. ActionEvent;
java import. awt. acara. ActionListener;
java import. util. Rawak;
javax import. hayun. JButton;
javax import. hayun. JFrame;
javax import. hayun. JLabel;
javax import. hayun. JTextField;
GameFrame kelas memanjangkan JFrame {
private static final serial serialVersionUID = 1L;
int randomNumber = new Random (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = JTextField baru (5);
JButton button = new JButton ("Guess");
JLabel label = new JLabel (numGuesses + "guesses");
GameFrame umum () {
setDefaultCloseOperation (JFrame EXIT_ON_CLOSE);
setLayout (baru FlowLayout ());
add (textField);
tambahkan (butang);
tambahkan (label); Butang
. addActionListener (MyActionListener baru () );
pek ();
setVisible (true);
}
kelas MyActionListener menerapkan ActionListener { @Override
public void actionPerformed (ActionEvent e) {
String textFieldText =
textField . getText (); jika (Integer parseInt (textFieldText) == randomNumber) {
butang. setEnabled (false);
textField. setText (textField. getText () + "Yes!");
textField. setEnabled (false);
} else {
textField. setText ("");
textField. requestFocus ();
}
numGuesses ++;
String guessWord = (numGuesses == 1)? "Guess": "guesses"; Label
. setText (numGuesses + guessWord);
}
}
}
Kelas
MyActionListener
di atas adalah
kelas dalam. Kelas dalam adalah banyak seperti mana-mana kelas lain. Tetapi dalam kod kelas dalaman, anda boleh merujuk kepada medan kelas yang melampirkan. Sebagai contoh, beberapa kenyataan di dalam MyActionListener
menggunakan nama
textField
, dan
textField
ditakrifkan dalam kelas GameFrame
Perhatikan bahawa kod di atas menggunakan kelas
MyActionListener
sekali sahaja. (Penggunaan hanya dalam panggilan ke
butang addActionListener
.) Jadi, adakah anda benar-benar memerlukan nama untuk sesuatu yang digunakan sekali sahaja? Tidak, anda tidak. Anda boleh menggantikan keseluruhan definisi kelas dalam dalam panggilan ke
butang.addActionListener
. Apabila anda melakukan ini, anda mempunyai kelas dalaman
tanpa nama.
Inilah cara ia berfungsi. java import. awt. FlowLayout; java import. awt. acara. ActionEvent;
java import. awt. acara. ActionListener;
java import. util. Rawak;
javax import. hayun. JButton;
javax import. hayun. JFrame;
javax import. hayun. JLabel;
javax import. hayun. JTextField;
GameFrame kelas memanjangkan JFrame {
private static final serial serialVersionUID = 1L;
int randomNumber = new Random (). nextInt (10) + 1;
int numGuesses = 0;
JTextField textField = JTextField baru (5);
JButton button = new JButton ("Guess");
JLabel label = new JLabel (numGuesses + "guesses");
GameFrame umum () {
setDefaultCloseOperation (JFrame EXIT_ON_CLOSE);
setLayout (baru FlowLayout ());
add (textField);
tambahkan (butang);
tambahkan (label); Butang
. addActionListener (
ActionListener baru () {
@Override public void actionPerformed (ActionEvent e) {
stringFileText = textField.getText ();
if (Integer parseInt (textFieldText) = randomNumber) {
butang setEnabled (false);
textField setText (textField getText () + "Yes!");
textField setEnabled (false) textField.setText ("");
textField requestFocus ();
}
numGuesses ++;
String guessWord = (numGuesses == 1) label setText (numGuesses + guessWord);
}
}
); Pek
();
setVisible (true);
}
} Kelas dalaman adalah baik untuk perkara seperti pengendali acara, seperti kaedah
actionPerformed
. Perkara yang paling sukar tentang kelas dalaman
tanpa nama
adalah menjejaki kurungan, pendakap kerinting, dan lekukan Sesetengah nasihat yang rendah hati: mulakan dengan menulis kod tanpa kelas dalaman. Kemudian, apabila anda bosan dengan kelas Java biasa, bereksperimen dengan menukar beberapa kelas biasa anda ke kelas dalam.