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.

Artículos Relacionados