Programación Java Curso2006

Anuncio
Programación Java
Curso 2006 - 1 C
GUI
Prof.. María Feldgen
Ing. Osvaldo Clúa
FIUBA
Introducción:
Java 1.0 poseía un modelo de interface gráfica o GUI (Graphical User Interface) que se basaba en la
plataforma en la que se implementaba java. Cada elemento de la GUI era mapeado sobre algún
elemento adecuado de la plataforma, llamado peer. Se podían manipular los peers en forma directa.
Java 1.1 introduce un nuevo modelo de interface gráfica: AWT (Abstract Window Toolkit); al mismo
tiempo que deja obsoleta (deprecated) al modelo anterior. Este es el modelo que vamos a usar en el
curso.
Java 1.x (o Java 2 según el marketing de SUN) introduce Swing que es un marco de trabajo o
framework que facilita la creación y uso de las GUI.
Usaremos AWT Es muy importante contar con la documentación (no el tutorial) ya que los métodos y
clases no van a ser presentados en detalle.
Explorando AWT
1. /** PruBoton: Botones en AWT
2.
Estos botones no hacen nada, es mas; para salir de
3.
la aplicacion hay que dar Control-C en la ventana de
invocacion.
4. */
5. import java.awt.*; /* hace accesible el package */
6.
7. class PruBoton extends Frame
8. { PruBoton(String s)
9.
{ super(s);
10.
setSize(200,100);
11.
setLayout(new FlowLayout()); // Manejador de Layout
12.
for (int i=0; i<6; i++)
13.
add(new Button("Boton " + i));
14.
setVisible(true);
15. }
Y para probarla usamos la clase
16.class TestPruBoton
17.{ public static void main(String[] args)
18. { PruBoton buttonFrame = new PruBoton("Ejemplo de
Botones");
19. }
20.}
De las muchas clases que componen el package java.awt .extendemos a la clase Frame.
La genealogía de esta clase es:
-1-
Java 2006 Guía 4
Prof.: Lic. Ing. Osvaldo Clúa
Prof. C.C. Maria Feldgen
FIUBA/EGRIET.
java.lang.Object clase madre de todas
-- java.awt.Component Es un objeto con representación gráfica, que puede interactuar con el usuario
-----java.awt.Container Es un componente capaz de contener otros componentes
--------java.awt.Window Es una ventana sin bordes, capaz de obtener foco
------------java.awt.Frame Es una ventana con bordes y título
Su único método es un constructor, que llama al constructor de su Super con un String que aparecerá
como título ("Ejemplo de Botones") en TestPruButton.
Completar usando la documentación:
La llamada setSize(...) indica el tamaño en pixels y es un método de .................. (completar)
setLayout(...) crea un new Flowlayout() y lo activa como el manejador de Layout. Es un
método de la clase ..................... El manejador de Layout es el responsable de como se verán los
componentes de un container, y como reaccionaran ante las operaciones de cambio de tamaño o
resizing.
Luego se agregan 6 botones con una etiqueta; y se hace visible al conjunto con setVisible(...)
que es de la clase ...............
Ejemplo anterior en Swing
2. /** PruBoton: Botones en Swing
3.
Estos botones no hacen nada, es mas; para salir de
4.
la aplicacion hay que dar Control-C en la ventana
5.
de invocacion.
6. */
7. import java.awt.*;
8. import javax.swing.*;
9.
10.class PruBoton extends JFrame
11.{ PruBoton(String s)
12. { super(s);
13.
setSize(200,100);
14.
getContentPane().setLayout(new FlowLayout());
15.
// Manejador de Layout
16.
for (int i=0; i<6; i++)
17.
getContentPane().add(new JButton("Boton " + i));
18.
setVisible(true);
19. }
20.}
Ejercicios básicos:
1) Probar el resultado de usar como LayoutManager a BorderLayout,. Seguir los ejemplos de
la documentación.
2) Escribir una clase que despliegue seis Checkbox. Los tres últimos deben pertenecer a un
mismo CheckboxGroup
3) Escribir una clase que despliegue una Choice con los Ítems ("ichi", "ni", "san", "yon",
"go",...,"ju") (o sea, los números del 1 al 10 en ...................)
4) En el ejercicio 3, usar una List en vez de una Choice.
Eventos: En Java los objetos AWT pueden generar eventos. En realidad, cualquier objeto puede
generarlos pero la funcionalidad de los objetos AWT ya incluye esta posibilidad. Un objeto capaz de
generar eventos es un objeto Observable.
-2-
Java 2006 Guía 4
Prof.: Lic. Ing. Osvaldo Clúa
Prof. C.C. Maria Feldgen
FIUBA/EGRIET.
Además, Cualquier Objeto es capaz de recibir eventos. Un objeto capaz de recibir eventos es un
objeto Observer.
La clase madre de todos los eventos en AWTEvent y las subclases son ComponentEvent,
FocusEvent, KeyEvent, MouseEvent, WindowEvent, ActionEvent, AdjustmentEvent, ItemEvent,
TextEvent.
La clase AWTEvent tiene los siguientes métodos:
AWTEvent( Object source, int id) lo crea
public int getID( ) devuelve la ID o tipo del evento
public String toString()
public String paramString() Para ver parámetros del usuario
protected void consume() Marca el evento como consumido
protected boolean isConsumed() indica si fue marcado
En general, el usuario no maneja esta clase en forma indirecta, sino que le interesan las subclases
ComponentEvent, tiene una serie de subclases para el manejo de eventos de bajo nivel (apretar y soltar
teclas, etc.)
FocusEvent, KeyEvent, MouseEvent, AdjustmentEvent, son propias de cada componente
WindowEvent se refiere a los controles de la ventana (por ejemplo, el botón de cierre)
ActionEvent es el mas usado, ya que se activa al accionar un componente (click de un botón, selección
de una lista, tecla return en un TextField
ItemEvent cuando un ítem es seleccionado o des-seleccionado.
Para tratar a los eventos, se deben programar ciertos métodos. Estos métodos se agrupan según lo
tipos de eventos en un archivo que indica nada mas que los tipos involucrados llamado interface. Se
dice que el objeto debe implementar la interface. Estas interfaces para eventos (listener) son:
ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener,
ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener, WindowListener
ActionListener tiene un único método actionPerformed(ActionEvent e) que es el usado para manejar
eventos de ese tipo.
WindowListener tiene siete métodos: windowActivated(WindowEvent), windowClosed(WindowEvent),
windowClosing(WindowEvent), windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent), windowIconified(WindowEvent), windowOpened(WindowEvent).
Si solo nos interesa manejar el botón de cerrar, deberíamos programar WindowClosing( ) pero la
interface nos obliga a programar los siete Para evitar esto, existe una clase que ya los tiene
programados, pero que no hacen nada. Esta clase es un adapter y se llama WindowAdapter de manera
que lo único necesario es extender la clase WindowAdapter y reprogramar windowClosing(...)
Para atender un evento, es decir, para hacerse observable, la clase debe registrarse. Para ello, los
componentes disponen de los métodos necesarios.
Como ejemplo:
1. /** BotonesList
Al oprimir el boton se agrega un item a
la lista
2. */
3. import java.awt.*;
4. import java.awt.event.*; // para importar java.awt.event.*
5.
6. class BotonesList extends Frame implements ActionListener
7.
// ActionListener es la escucha
generica
-3-
Java 2006 Guía 4
Prof.: Lic. Ing. Osvaldo Clúa
Prof. C.C. Maria Feldgen
8.
FIUBA/EGRIET.
// tiene un solo metodo
:actionPerformed
9. { public Button []boton ;
10. public List lista;
11.
12. BotonesList(String s)
13. { super(s); // Crea el frame con titulo
14.
setSize(200,160);
15.
setLayout(new FlowLayout());
16.
boton=new Button[6];
17.
for (int i=0; i<6; i++){
18.
boton[i]=new Button("Boton " + i);
19.
add(boton[i]);
20.
boton[i].addActionListener(this);}
21.// Es el propio manejador de eventos, por eso se usa this
22.
lista= new List (4); // Lista con cuatro elementos
visibles
add(lista);
//Uso de un Adapter para no hacer seis nulos y uno que sirva
addWindowListener(
new WindowAdapter () {
public void windowClosing(WindowEvent event)
{
setVisible(false);
System.exit(0); } }
);
// Eso es todo amigos ... La clase se declara en el llamado
setVisible(true);
}
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33. public void actionPerformed(ActionEvent event)
34.// El manejador de eventos
35. { lista.add(event.getActionCommand()); }
36.}
Ejercicios básicos con eventos: (Todos deben manejar el botón de cerrar de la ventana)
1) Para el ejercicio 3 de los ejercicios básicos, proveer un Label donde aparezca el ítem
seleccionado y lo traduzca.
2) Escribir una clase con dos List y una TextArea donde aparezcan los Ítems seleccionados de
cada List, indicando de que List fueron tomados.
-4-
Java 2006 Guía 4
Prof.: Lic. Ing. Osvaldo Clúa
Prof. C.C. Maria Feldgen
FIUBA/EGRIET.
3) Agregar al ejercicio de los Botones una List que indique que botón fue oprimido.
4) Escribir una clase con tres botones. Dos de ellos se habilitan y deshabilitan según un tercero.
Cada click debe quedar registrado en una TextArea
5) Escribir una clase con una Scrollbar horizontal. su Maximun es de 10000 y su
BolckIncrement de 100. Al cambiar su posición, un AdjustmentListener implementará el método
adjustementValueChanged y pasará este valor a un TextField.
6) Para el ejercicio 5, escribir además el paso inverso (Un nuevo valor en el TextField cambia el
Scrollbar).
7) Combinar el ejercicio 6 con una List de unidades para obtener un valor y una unidad (Km, m,
cm) y colocar lo obtenido en un Label.
-5-
Java 2006 Guía 4
Prof.: Lic. Ing. Osvaldo Clúa
Prof. C.C. Maria Feldgen
FIUBA/EGRIET.
8) Al ejercicio 7 añadirle otro Label donde aparezca el valor convertido en inches.
9) Combinar dos interfaces como las del ejercicio 7 para poder pasar en ambos sentidos de km,
m y cm a inch, feet, yard o mile en forma gráfica (con el scrollbar) o textual indistinta.
-6-
Descargar