Clase interna anónima "Anonymous inner class"

En este tutorial vamos a describir lo que es una clase interna anónima y sus beneficios en el desarrollo de código.

A continuación tenemos dos ejemplos de como escribir una clase interna anónima aplicada a la creación de un listener para los botones loginButton y registerButton. En los dos casos definimos la clase y creamos el objeto en una misma instrucción, ahorrándonos la creación de una clase aparte. En el caso del listener para el boton registerButton además nos ahorramos la creación de una variable.

package com.edu4java.swing.tutrial5;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginView3 {

	public static void main(String[] args) {
		JFrame frame = new JFrame("Demo application");
		frame.setSize(300, 150);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		placeComponents(frame);
		frame.setVisible(true);
	}

	private static void placeComponents(JFrame frame) {
		frame.setLayout(null);

		JLabel userLabel = new JLabel("User");
		userLabel.setBounds(10, 10, 80, 25);
		frame.add(userLabel);

		JTextField userText = new JTextField(20);
		userText.setBounds(100, 10, 160, 25);
		frame.add(userText);

		JLabel passwordLabel = new JLabel("Password");
		passwordLabel.setBounds(10, 40, 80, 25);
		frame.add(passwordLabel);

		JPasswordField passwordText = new JPasswordField(20);
		passwordText.setBounds(100, 40, 160, 25);
		frame.add(passwordText);

		JButton loginButton = new JButton("login");
		loginButton.setBounds(10, 80, 80, 25);
		frame.add(loginButton);

		JButton registerButton = new JButton("register");
		registerButton.setBounds(180, 80, 80, 25);
		frame.add(registerButton);

		ActionListener loginButtonListener = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JButton source = (JButton) e.getSource();
				JOptionPane.showMessageDialog(source, source.getText()
						+ " button has been pressed");
			}
		};
		loginButton.addActionListener(loginButtonListener);
		
		registerButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog((Component) e.getSource(),
						"button has been pressed");
			}
		});
	}

}

En la interfaz de usuario es muy común tener muchos listeners que sólo se utilizarán una sola vez para un botón por lo que, utilizando este tipo de clases internas anónimas, nos ahorraremos muchas clases y archivos en el desarrollo del código.

Para más información sobre clases anónimas, threads y eventos ver Video tutorial: Eventos. Capturando las entrada por teclado o mejor la serie entera de programación de juegos en java.

<< Anterior Siguiente >>