Cómo crear clases internas en java
Aquí está una gran noticia! En Java, se puede definir una clase dentro de otra clase! Aquí el GameFrame
clase contiene una clase llamada MyActionListener
.
importación java.awt.FlowLayout-
importación java.awt.event.ActionEvent-
importación java.awt.event.ActionListener-
importación java.util.Random-
importación javax.swing.JButton-
importación javax.swing.JFrame-
importación javax.swing.JLabel-
importación javax.swing.JTextField-
clase GameFrame extiende JFrame {
private static final larga serialVersionUID = 1L
int randomNumber = new Random (). nextInt (10) + 1-
int numGuesses = 0-
JTextField textField = new JTextField (5) -
JButton botón = new JButton ("Adivinar") -
JLabel etiqueta = new JLabel (numGuesses + " conjeturas") -
GameFrame pública () {
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) -
setLayout (nueva FlowLayout ()) -
añadir (textField) -
añadir (botón) -
añadir (etiqueta) -
button.addActionListener (nueva MyActionListener ()) -
paquete()-
setVisible (verdadero) -
}
MyActionListener clase implementa ActionListener {
@Anular
actionPerformed (ActionEvent e) {public void
Cadena textFieldText = campo de texto.getText () -
si (Integer.parseInt (textFieldText) == randomNumber) {
button.setEnabled (falso) -
textField.setText (textField.getText () + " ¡Sí!") -
textField.setEnabled (falso) -
} Else {
textField.setText ("") -
textField.requestFocus () -
}
numGuesses ++ -
Cadena guessWord = (numGuesses == 1)? " adivinar" : " conjeturas"-
label.setText (numGuesses + guessWord) -
}
}
}
los MyActionListener
clase anterior es un clase interna. Una clase interna se parece mucho a cualquier otra clase. Pero en el código de una clase interna, puede hacer referencia a los campos de la clase envolvente. Por ejemplo, varias sentencias dentro de MyActionListener
utilizar el nombre campo de texto
, y campo de texto
se define en la envolvente GameFrame
clase.
Observe que el código anterior utiliza el MyActionListener
clase sólo una vez. (El único uso es en una llamada a button.addActionListener
.) Por lo tanto, lo que realmente necesita un nombre para algo que se utiliza una sola vez? No, no lo hace. Puede sustituir toda la definición de la clase interna dentro de la llamada a button.addActionListener
. Al hacer esto, usted tiene una clase interna anónima. Así es como funciona.
importación java.awt.FlowLayout-
importación java.awt.event.ActionEvent-
importación java.awt.event.ActionListener-
importación java.util.Random-
importación javax.swing.JButton-
importación javax.swing.JFrame-
importación javax.swing.JLabel-
importación javax.swing.JTextField-
clase GameFrame extiende JFrame {
private static final larga serialVersionUID = 1L
Video: Clases Internas y Anonimas - Tutorial Java
int randomNumber = new Random (). nextInt (10) + 1-
int numGuesses = 0-
JTextField textField = new JTextField (5) -
JButton botón = new JButton ("Adivinar") -
Video: Aprende a programar en Java: Clases anidadas, internas y anonimas
JLabel etiqueta = new JLabel (numGuesses + " conjeturas") -
GameFrame pública () {
Video: Java - Clases Internas, parte 1
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) -
setLayout (nueva FlowLayout ()) -
añadir (textField) -
añadir (botón) -
añadir (etiqueta) -
button.addActionListener (new ActionListener () {
@Anular
actionPerformed (ActionEvent e) {public void
Cadena textFieldText = textField.getText () -
si (Integer.parseInt (textFieldText) == randomNumber) {
button.setEnabled (falso) -
textField.setText (textField.getText () + " ¡Sí!") -
textField.setEnabled (falso) -
} Else {
textField.setText ("") -
textField.requestFocus () -
}
numGuesses ++ -
Cadena guessWord = (numGuesses == 1)? " adivinar" : " conjeturas"-
label.setText (numGuesses + guessWord) -
}
}) -
paquete()-
setVisible (verdadero) -
}
}
Video: como crear una clase un objeto en java
Las clases internas son buenas para cosas como controladores de eventos, tales como la acción realizada
método. Lo más difícil acerca de una anónimo clase interna es hacer el seguimiento de los paréntesis, los corchetes, y la sangría Algunos humilde consejo: empezar por escribir código sin ningún clases internas. Más tarde, cuando se aburren con las clases de Java ordinarias, experimento cambiando algunos de sus clases normales en las clases internas.