Ejercicio de interfaces gráficas de usuario (IV)

El cuarto ejercicio ya. Espero que os estén ayudando a comprender mejor como programar con Java.

Ejercicio

Intenta escribir una aplicación gráfica con una ventana que tenga una etiqueta y un área de texto. La aplicación debe reflejar en el área de texto todos los eventos de ventana que se produzcan por la creación de la ventana o por las interacciones del usuario.

Como puede hacerse

Primero se construye la ventana principal de la aplicación que contiene un panel en el que se incluyen la etiqueta y el área de texto. Para poder reflejar todos los eventos de la ventana se hace que la propia ventana implemente la interfaz de oyente de ventana y se proporcionan los siete métodos correspondientes de esta interfaz que añaden al área de texto una línea de texto, indicando el evento producido.

Solución

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class VentanaOyente1 extends JFrame implements WindowListener {

private JTextArea areaTexto;
private JLabel etiqueta;
private JPanel panel;
private final String FIN = “\n”;

public VentanaOyente1() {
etiqueta = new JLabel(“Eventos”);
areaTexto = new JTextArea(10, 50); // SE CREA UN AREA DE TEXTO CON 10
// FILAS Y 50 COLUMNAS
areaTexto.setText(“Texto inicial”);
panel = new JPanel();

panel.add(etiqueta);
panel.add(areaTexto);
add(panel);
// CON THIS ES LA PROPIA VENTANA LA QUE SE REGISTRA A SI MISMA COMO
// OYENTE DE EVENTOS VENTANA
addWindowListener(this);
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle(“Ventana oyente”);
setVisible(true);
pack();
}

@Override
public void windowActivated(WindowEvent e) {
areaTexto.append(FIN + “Ventana activada”);

}

@Override
public void windowClosed(WindowEvent e) {
areaTexto.append(FIN + “Ventana cerrada”);

}

@Override
public void windowClosing(WindowEvent e) {
areaTexto.append(FIN + “Ventana cerrándose”);

}

@Override
public void windowDeactivated(WindowEvent e) {
areaTexto.append(FIN + “Ventana desactivada”);

}

@Override
public void windowDeiconified(WindowEvent e) {
areaTexto.append(FIN + “Ventana desiconizada”);

}

@Override
public void windowIconified(WindowEvent e) {
areaTexto.append(FIN + “Ventana iconizada”);

}

@Override
public void windowOpened(WindowEvent e) {
areaTexto.append(FIN + “Ventana abierta”);

}

public static void main(String[] args) {
VentanaOyente1 ventana = new VentanaOyente1();

}

}

NOTA: En este ejemplo he tratado todos los eventos de ventana que reflejan cualquier cambio de estado. Estos eventos son de bajo nivel. Siempre que se pueda, es preferible hacer el tratamiento de eventos de alto nivel o semánticos que hacerlo de sus eventos equivalentes de bajo nivel.

Os tiene que quedar algo parecido a:

Ejercicio IV Swing

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s