awt swing teoria

14
Contrucción de interfaces gráficas en Java AWT y Swing 1. 8. Contrucción de interfaces gráficos en Java 2 Índice Introducción – Objetivos Jerarquia de clases: patrón de diseño COMPOSITE Componentes principales Contenedores AWT/Swing Componentes AWT/Swing Gestores de diseño Gestión de eventos Clases Listener Clases Adapter Patrón de diseño MVC 8. Contrucción de interfaces gráficos en Java 3 Introducción Cualquier lenguaje de programación moderno ofrece herramientas para la contrucción de interfaces gráficas de usuario (GUI). Java permite al programador: El diseño y programación de interfaces gráficas de usuario de forma rápida y sencilla. El paquete de clases AWT (Abstract Window Toolkit) El paquete de clases Swing Swing es una evolución de AWT, ofreciendo más clases y una mayor flexibilidad. 8. Contrucción de interfaces gráficos en Java 4 Objetivos Entender el diseño de la jerarquía de clases Java que se utilizan para la construcción de GUIs. Entender cómo se realiza la gestión de eventos. Aprender a usar un entorno de programación (Eclipse, Jbuilder, Jdeveloper...) para construir GUIs No es un objetivo: - conocer todos los nombres de clases, interfaces y demás componentes gráficos Evento

Upload: hector-hastaloscojones

Post on 22-Jan-2016

52 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Awt Swing Teoria

Contrucción de interfacesgráficas en Java

AWT y Swing

1.

8. Contrucción de interfaces gráficos en Java 2

Índice

• Introducción– Objetivos– Jerarquia de clases: patrón de diseño COMPOSITE

• Componentes principales– Contenedores AWT/Swing – Componentes AWT/Swing – Gestores de diseño

• Gestión de eventos – Clases Listener– Clases Adapter

• Patrón de diseño MVC

8. Contrucción de interfaces gráficos en Java 3

Introducción

• Cualquier lenguaje de programación moderno ofrece herramientas para la contrucción de interfaces gráficas de usuario (GUI).

• Java permite al programador:– El diseño y programación de interfaces gráficas de usuario de

forma rápida y sencilla. – El paquete de clases AWT (Abstract Window Toolkit)‏– El paquete de clases Swing

• Swing es una evolución de AWT, ofreciendo más clases y una mayor flexibilidad.

8. Contrucción de interfaces gráficos en Java 4

Objetivos

• Entender el diseño de la jerarquía de clases Java que se utilizan para la construcción de GUIs.

• Entender cómo se realiza la gestión de eventos.

• Aprender a usar un entorno de programación (Eclipse, Jbuilder, Jdeveloper...) para construir GUIs

• No es un objetivo:- conocer todos los nombres de clases, interfaces y demás componentes gráficos

Evento

Page 2: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 5

AWT: componentes principales

• Jerarquía de clases AWT

COMPONENTE

CONTENEDOR(los contenedores son componentes)‏

8. Contrucción de interfaces gráficos en Java 6

Jerarquía de clases AWT : patrón de diseño COMPOSITE

Las opciones son infinitas:- Una ventana con 2 campos de

texto, 3 botones y 2 áreas de texto, además de un panel que contiene 5 casillas de verificación y una lista desplegable.

- Una ventana con 2 etiquetas, 2 áreas de texto y un botón.

- ...

8. Contrucción de interfaces gráficos en Java 7

Jerarquía de clases AWT : patrón de diseño COMPOSITE

8. Contrucción de interfaces gráficos en Java 8

Jerarquía de clases AWT : un diseño como el siguiente sería incorrecto...

• En un Frame, necesitaríamos disponer de los métodos addButton, addCheckBox, addTextField, addFrame,... .

• Además, el diagrama no está en absoluto completo, dado que Button puede ser un componente de Panel, o de Dialog, ... y el diseño anterior no lo contempla.

• Si se quisiera añadir un nuevo componente XXX, deberíamos de cambiar la clase Frame y añadir el método addXXX (esta solución no sería nada extensible) ‏

Button

TextField

CheckBox

*

*

* Frame

* ...

Page 3: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 9

Jerarquía de clases AWT: patrón de diseño COMPOSITE

Un contenedor está formado por componentes, siend éstos componentes concretos o contenedores. A su vez, estos contenedores podrían tener distintos componentes, etc.

Contenedor

add (Componente c) ‏--El método add --añade un componente--al contenedor

Componente

Comp.Concreto1 CompConcretoN Contenedor

ContConcreto1 ContConcreto2

8. Contrucción de interfaces gráficos en Java 10

Swing: componentes principales

8. Contrucción de interfaces gráficos en Java 11

AWT/Swing: contenedores

Contenedores

• Clases Frame/JFrame– Una simple ventana que ofrece iconos para maximizar,

minimizar y cerrarla. Se le puede añadir un título.– Único contenedor al que se le pueden añadir menús.

• Clases Panel/JPanel– Contenedores genéricos para agrupar componentes.– Clase utilizada para meter contenedores dentro de otros

contenedores (dentro de un panel, subpaneles)‏– En Swing, dentro de la clase JFrame se añade

automáticamente un Panel. En AWT no.

el principal•Frame/JFrame•Panel/JPanel•Dialog/JDialog

8. Contrucción de interfaces gráficos en Java 12

Contenedores AWT/Swing

import javax.swing.*;public class Marco extends JFrame {

public Markoa() {super("Panela duen Frame baten adibidea");initialize();

}private void initialize() {

this.setSize(300, 200);}

public static void main(String[] args){Marco thisClass = new Marco();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);

}}

Al cerrar el JFrame, terminar la aplicación

Dentro de la clase JFrame se añade un Panel automáticamente

Page 4: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 13

Componentes principales AWT/Swing

• Clases TextField/JTextField– Campo de entrada de texto de una sóla línea.

• Clases TextArea/JTextArea – Permiten introducir líneas de texto múltiples– Se puede usar también para mostrar resultados (texto) ‏– La clase JTextArea no implementa un scroll automático. Es

necesario añadirlo dentro de un JScrollPane. TextArea, sin embargo, sí lo implementa.

8. Contrucción de interfaces gráficos en Java 14

Componentes principales AWT/Swing

import javax.swing.*;import java.awt.*;

public class TestuEremuak extends JFrame {JLabel jLabel1 = new JLabel();JTextField jTextField1 = new JTextField();JLabel jLabel2 = new JLabel();JTextArea jTextArea1 = new JTextArea();

public TestuEremuak(){this.setTitle("Testu-Eremuekin adibidea");jLabel1.setText("Sartu zure izena");jTextField1.setColumns(25);jLabel2.setText("Utzi zure mezua");jTextArea1.setColumns(50);jTextArea1.setRows(10);this.getContentPane().add(jLabel1, null); this.getContentPane().add(jTextField1, null);this.getContentPane().add(jLabel2, null);this.getContentPane().add(jTextArea1, null);

}public static void main(String[] args){

Frame frame = new TestuEremuak();frame.setVisible(true);

}}

Ojo...

8. Contrucción de interfaces gráficos en Java 15

Cómo analizar/entender el API Java

8. Contrucción de interfaces gráficos en Java 16

Componentes principales de AWT/Swing

• Clases Button/JButton – Se usa para construir Botones.– Al pulsar un botón se generará un evento, que habrá que

tratar.

• Clases Label/JLabel – Utilizado para mostrar información.– Se usan junto a los cuadros de texto.

Page 5: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 17

Componentes principales AWT/Swing

import javax.swing.*;import java.awt.*;

public class Botoiak extends JFrame {

JButton jButton1 = new JButton();JButton jButton2 = new JButton();JButton jButton3 = new JButton();

public Botoiak() {this.setTitle("Botoien adibidea");jButton1.setText("Ireki");jButton2.setText("Gorde");jButton3.setText("Ezeztatu");this.getContentPane().add(jButton3, BorderLayout.EAST);this.getContentPane().add(jButton2, BorderLayout.CENTER);this.getContentPane().add(jButton1, BorderLayout.WEST);pack();

}

public static void main(String[] args){Frame frame = new Botoiak();frame.setVisible(true);

}} 8. Contrucción de interfaces gráficos en Java 18

Componentes principales AWT/Swing

• Clases CheckBox/JCheckBox/JRadioButton

– Casillas de verificación. Ofrecen funcionalidad para activar y desactivar opciones.

– Los componentes JRadioButton los agruparemos en un ButtonGroup para conseguir seleccionar una (y sólo una) opción del grupo. ButtonGroup no es un componente visual.

8. Contrucción de interfaces gráficos en Java 19

AWT/Swing: contenedores

import javax.swing.*;import java.awt.*;import java.util.Vector;public class Konplexua extends JFrame {...Button aButton = new Button("Ezabatu");JPanel jPanel2 = new JPanel();JTextArea jTextArea1 = new JTextArea();// Crear botones radialesJRadioButton goizez = new JRadioButton("Goizez",true);JRadioButton arratsaldez = new JRadioButton("Arratsaldez",false);// Crear agrupación de botonesButtonGroup aukeraBotoiMultzoa = new ButtonGroup();aukeraBotoiMultzoa.add(goizez);aukeraBotoiMultzoa.add(arratsaldez);// Crear lista desplegable y cargarla de datosVector<String> astegunak = new Vector<String>();JComboBox jComboBox1 = new JComboBox(astegunak);astegunak.addElement("Astelehena");astegunak.addElement("Asteartea"); astegunak.addElement("Asteazkena");astegunak.addElement("osteguna");astegunak.addElement("Ostirala");

// Construir panel2jPanel2.add(BorderLayout.EAST, goizez);jPanel2.add(BorderLayout.EAST, arratsaldez);jPanel2.add(BorderLayout.EAST, jComboBox1);// Meter en panel princ. el JPanel2, el área de texto y el botónthis.setSize(320,200);this.getContentPane().add(BorderLayout.NORTH, jPanel2);this.getContentPane().add(BorderLayout.CENTER,jTextArea1);this.getContentPane().add(BorderLayout.SOUTH, aButton);this.setVisible(true);}

jRadioButton1jRadioButton2

jComboBox1

jButton1JPanel

jPanel2

jTextArea1

8. Contrucción de interfaces gráficos en Java 20

AWT/Swing: componentes principales

import javax.swing.*;import java.awt.*;public class Aukerak extends JFrame{ JPanel jPanel1 = new JPanel();JLabel jLabel1 = new JLabel();JRadioButton jRadioButton1 = new JRadioButton();JRadioButton jRadioButton2 = new JRadioButton();ButtonGroup g = new ButtonGroup();JLabel jLabel2 = new JLabel();JCheckBox jCheckBox1 = new JCheckBox();JCheckBox jCheckBox2 = new JCheckBox(); //Besteak eraikipublic Aukerak() {

jLabel1.setText("Sexua:");jRadioButton1.setText("Gizona"); jRadioButton1.setSelected(true);jRadioButton2.setText("Emakumea"); jLabel2.setText("Aukeratu zure ekintza gogokoenak (bat baino gehiago izan daitezke)");jCheckBox1.setText("Musika entzun"); jCheckBox1.setSelected(true);jCheckBox2.setText("Dantzatu");//Besteenak testuak gehitujPanel1.setLayout(new FlowLayout());jPanel1.add(jLabel1, null);jPanel1.add(jRadioButton2, null);jPanel1.add(jRadioButton1, null);jPanel1.add(jLabel2, null);jPanel1.add(jCheckBox1, null); //Beste JCheckBox-ak gehitug.add(jRadioButton1);g.add(jRadioButton2);this.getContentPane().add(jPanel1, null);

}}

Page 6: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 21

AWT/Swing: componentes principales

• Clases List/JList – Por medio de las listas desplegables, mostraremos al

usuario un grupo de opciones. A menudo se usan para evitar la saturación de información en pantalla.

– JList no dispone de scroll por defecto. Para ello, se debe añadir a un JScrollPane.

8. Contrucción de interfaces gráficos en Java 22

AWT/Swing: componentes principales

import javax.swing.*;import java.awt.*;import java.util.*;public class Listak extends JFrame {

JList jList1; //new gero egingo daVector elementuak = new Vector();JPanel jPanel1 = new JPanel();public Listak(){this.setTitle("Listen adibidea");elementuak.addElement("Java");elementuak.addElement("Pascal");elementuak.addElement("Cobol");elementuak.addElement("Perl");jList1 = new JList(elementuak);jPanel1.add(jList1, null);this.getContentPane().add(jPanel1, null);elementuak.addElement("LISP"); // gehitzean, JLIST-a aldatzen da!!

}public static void main(String[] args){Frame frame = new Listak();frame.setVisible(true);

}}

8. Contrucción de interfaces gráficos en Java 23

AWT/Swing: componentes principalesimport javax.swing.*;import java.util.*;public class ZerrendaScrollekin extends JFrame {

JPanel jPanel1 = new JPanel();JList jList1;Vector <String> elementuak = new Vector<String>();public ZerrendaScrollekin(){

this.getContentPane().add(jPanel1, null);elementuak.addElement("Java");elementuak.addElement("Pascal");elementuak.addElement("Cobol");elementuak.addElement("Perl");jList1 = new Jlist(elementuak);jList1.setVisibleRowCount(8);

//Lista scroll-a duen panel batean sartzen dugu JScrollPane j = new JScrollPane(jList1); jPanel1.add(j,null);for (int i=0;i<50;i++) elementuak.addElement("LP "+i);

pack();}public static void main(String[] args){ZerrendaScrollekin frame = new ZerrendaScrollekin();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}} 8. Contrucción de interfaces gráficos en Java 24

AWT/Swing: componentes principales

• Clases Choice/JComboBox– Son listas (desplegables) de opciones.– Las ventajas de esto: las listas de opciones no ocupan

demasiado espacio en pantalla.

Page 7: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 25

AWT/Swing: componentes principales

import javax.swing.*;import java.util.*;public class AukeraZerrendak extends JFrame {

Vector <String> elementuak = new Vector<String>();JPanel jPanel1 = new JPanel();JComboBox jComboBox1;//new gero egingo da

public AukeraZerrendak(){elementuak.addElement("Java");

elementuak.addElement("Pascal");elementuak.addElement("Cobol");elementuak.addElement("Perl");jComboBox1 = new JComboBox(elementuak);jPanel1.add(jComboBox1, null);this.getContentPane().add(jPanel1, null);elementuak.addElement("LISP"); // beste item bat gehitzean, JLIST-a aldatzen da!!pack();

}public static void main(String[] args){

AukeraZerrendak frame = new AukeraZerrendak();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}} 8. Contrucción de interfaces gráficos en Java 26

AWT/Swing: componentes principales

• Creación de Menús– En Swing

• El único contenedor que puede alojar una barra de menúes JFrame .

• La clase JMenuBar crea la barra de menú donde se insertarán las opciones de dicho menú.

• La clase JMenu es la encargada de crear los menús. Estos menús tienen un nombre asociado y muestran una lista desplegable con varios elementos.

• Los elementos de un menú pueden ser objetos JmenuItem u objetos JMenu (para crear menús en cascada)‏

8. Contrucción de interfaces gráficos en Java 27

AWT/Swing: componentes principales

• Creación de menús en Swing

JMenuJMenu JMenuBar

JMenuItemJMenuItem

8. Contrucción de interfaces gráficos en Java 28

AWT/Swing: componentes principales

public class Menuak extends JFrame {JMenuBar menuBarra = new JMenuBar();JMenu fitxategi = new JMenu(); JMenu aukerak = new JMenu();JMenu berria = new JMenu(); JMenuItem ireki = new JMenuItem();JMenuItem gorde = new JMenuItem(); JMenuItem atera = new JMenuItem();JMenuItem koloreak = new JRadioButtonMenuItem();JMenuItem txuriBeltz = new JRadioButtonMenuItem();ButtonGroup bg = new ButtonGroup();JMenuItem testua = new JMenuItem(); JMenuItem grafikoa = new JMenuItem();public Menuak() {

this.setJMenuBar(menuBarra); this.setTitle("Menuekin adibidea");fitxategi.setText("Fitxategi"); aukerak.setText("Aukerak");berria.setText("Berria"); grafikoa.setText("Grafikoa");testua.setText("Testua"); ireki.setText("Ireki");gorde.setText("Gorde"); atera.setText("Atera");koloreak.setText("Koloreak"); txuriBeltz.setText("Txuri-beltz");testua.setText("Testua");berria.add(grafikoa); berria.add(testua); berria.add(testua);fitxategi.add(berria); fitxategi.add(ireki); fitxategi.add(gorde);fitxategi.addSeparator(); fitxategi.add(atera);menuBarra.add(fitxategi); aukerak.add(txuriBeltz); aukerak.add(koloreak);bg.add(txuriBeltz); bg.add(koloreak);menuBarra.add(aukerak);

}public static void main(String[] args){Menuak frame = new Menuak();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}}

Page 8: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 29

AWT/Swing: componentes principales

• Inserción de imágenes– Meteremos la imagen en un JLabel

import javax.swing.*;import java.awt.*;

public class FrameIrudiekin extends JFrame {JButton jButton1 = new JButton();JButton jButton2 = new JButton();

public FrameIrudiekin() {this.getContentPane().setLayout(null);this.setSize(new Dimension(400, 300));this.setTitle("Irudiak nola bistaratu");

JLabel lb1 = new JLabel(new ImageIcon(getClass().getResource("katua.jpg")));this.getContentPane().add(lb1);lb1.setSize(lb1.getPreferredSize());lb1.setLocation(20,20);JLabel lb2 = new JLabel(new ImageIcon(getClass().getResource("armiarma.jpg")));this.getContentPane().add(lb2);lb2.setSize(lb2.getPreferredSize());lb2.setLocation(20,120);

jButton1.setText("Katua erosi");jButton1.setBounds(new Rectangle(180, 40, 160, 30));this.getContentPane().add(jButton1, null);jButton2.setText("Armiarma erosi");jButton2.setBounds(new Rectangle(180, 140, 160, 30));this.getContentPane().add(jButton2, null);

8. Contrucción de interfaces gráficos en Java 30

AWT/Swing: componentes principales

• Creación dinámica de componentesimport javax.swing.*;import java.awt.*;public class Saskia extends JFrame {

int N=5;JButton[] botoiak= new JButton[N];JTextField[] testuKutxak = new JTextField[N];public Saskia(){

for (int i=0; i<N; ++i){botoiak[i] = new JButton();testuKutxak[i] = new JTextField();

}this.getContentPane().setLayout(null);this.setSize(new Dimension(400, 300));this.setTitle("Saskia ikusi");

for (int i=0; i<N; ++i){ botoiak[i].setBounds(new Rectangle(20, 20+i*40, 80, 30));botoiak[i].setText("Botoia:"+i);this.getContentPane().add(botoiak[i], null);testuKutxak[i].setBounds(new Rectangle(110, 20+i*40, 40, 30));this.getContentPane().add(testuKutxak[i], null);

}}public static void main(String[] args){

Saskia a = new Saskia();a.setVisible(true); a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}}

8. Contrucción de interfaces gráficos en Java 31

Gestores de Diseño: Layout

• Se usan para definir dónde colocar un componente dentro de un contenedor.

edukiontzia.add(osagaia);• FlowLayout (Gestor predeterminado para Panel)‏

– Los componentes se van añadiendo a una línea. Al completar la línea, se pasa a la siguiente.

• BorderLayout (Gestor predeterminado para Frame y Dialog ) ‏– Los componentes se añaden en una de estas 5 zonas:

norte, sur, este, oeste y centro.

• Se puede cambiar el gestor predeterminado:edukiontzia.setLayout(new BorderLayout());

8. Contrucción de interfaces gráficos en Java 32

Gestores de Diseño: Layout

• Si se quiere poner el componente en unas coordenadas concretas, se debe de eliminar el gestor de diseño.

osagaia.setLayout(null);

• Sean this un contenedor y textField1 uno de sus componentes:

setLayout(null); textField1.setBounds(15,20,50,60);

x y zabalera altuera

Page 9: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 33

Gestores de Diseño: Layout

Etiqueta en BorderLayout.NORTH Panel con BorderLayout

Panel en BorderLayout.CENTER. Este panel tiene un GridLayout(4,3)‏

Panel en BorderLayout.SOUTH. Éste panel tiene un FlowLayout.

8. Contrucción de interfaces gráficos en Java 34

public class Layoutak extends JFrame {JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();JPanel jPanel3 = new JPanel();BorderLayout borderLayout1 = new BorderLayout();GridLayout gridLayout1 = new GridLayout(4,3);JLabel jLabel1 = new JLabel();//...public Layoutak(){

jPanel1.setLayout(borderLayout1);jLabel1.setText("Gustatzen?");jCheckBox1.setText("Bai");jCheckBox2.setText("Ez");jLabel2.setText("Aukeratu eta botoi bat sakatu");jLabel2.setHorizontalAlignment(SwingConstants.CENTER);jPanel3.setLayout(gridLayout1);jRadioButton1.setText("A");//...jPanel3.add(jRadioButton1, null);jPanel3.add(jButton1, null);jPanel3.add(jButton2, null);jPanel3.add(jRadioButton2, null);//...jPanel2.add(jLabel1, null);jPanel2.add(jCheckBox1, null);jPanel2.add(jCheckBox2, null);jPanel1.add(jLabel2, BorderLayout.NORTH);jPanel1.add(jPanel3, BorderLayout.CENTER);jPanel1.add(jPanel2, BorderLayout.SOUTH);this.getContentPane().add(jPanel1, null);

}

Gestores de Diseño: LayoutjPanel1

jPanel2jPanel3

8. Contrucción de interfaces gráficos en Java 35

Gestores de Diseño: Layout

• Ventajas de definir un GUI con gestor de diseño:– los componentes se redibujan automáticamente al ajustar el

tamaño de la ventana (ajustándose al tamaño disponible).

8. Contrucción de interfaces gráficos en Java 36

Gestores de Diseño: Layout

• Sin gestor de diseño se definen las coordenadas de todos los componentes – fácil de hacer con herramientas visuales.

jPanel1.setBounds(new Rectangle(3, 0, 333, 170));jPanel1.setLayout(null);jLabel1.setText("Gustatzen");jLabel1.setBounds(new Rectangle(66, 18, 62, 16));jPanel1.add(jLabel1,null);jCheckBox1.setText("Bai");jCheckBox1.setBounds(new Rectangle(142, 17, 48, 19));jPanel1.add(jCheckBox1,null);jCheckBox2.setText("Ez");jCheckBox2.setBounds(new Rectangle(201, 17, 44, 21));

jRadioButton1.setText("A");jRadioButton1.setBounds(new Rectangle(14, 10, 49, 23));jRadioButton2.setText("B");jRadioButton2.setBounds(new Rectangle(14, 40, 58, 23));jRadioButton3.setText("C");jRadioButton3.setBounds(new Rectangle(14, 70, 55, 23));jButton1.setText("A1");jButton1.setBounds(new Rectangle(139, 10, 80, 23));//...

Page 10: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 37

Gestores de Diseño: Layout

• Desventajas de no usar un gestor de diseño:– Al redimensionar el Frame, los componentes se mantienen sin

cambiar su posición (no se ajustarn al tamaño disponible).

8. Contrucción de interfaces gráficos en Java 38

Otros contenedores

• Clases Dialog/JDialog/JOptionPane – Ventana para leer o mostrar datos del usuario.– Si las hacemos MODAL , no podremos cambiar de ventana

mientras el diálogo siga activo.

• Clase JFileChooser (Swing)

8. Contrucción de interfaces gráficos en Java 39

Gestión de Eventos

• Al diseñar un interfaz gráfico debemos de tener en cuenta que a consecuencia de las acciones del usuario se generarán distintos eventos.

• Se deben de programar métodos para responder a estos eventos provocados por el usuario.

• Un evento:– es generado por una acción del usuario.– está ligado a un componente del GUI.– Ejemplos:

• pulsar una tecla, mover el ratón, cambiar el tamaño de una ventana, cerrarla, minimizarla, pulsar un botón, perder u obtener el foco de un componente, cambiar el valor de un campo de texto, elegir una opción de menú...

8. Contrucción de interfaces gráficos en Java 40

import javax.swing.*;

public class SimpleGUI extends JFrame {

JButton button;

public void ekin(){button = new JButton("sakatu hemen");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().add(button);setSize(300,300);setVisible(true);

}

public static void main(String[] args){SimpleGUI frame = new SimpleGUI();frame.setTitle("gertaeren kudeaketa");frame.ekin();

}

}

Gestión de Eventos

Page 11: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 41

Si queremos hacer algo cuando se pulse el botón: 1) deberemos de programar un método , para responder al evento que se genera.2) tendremos que saber cuándo se genera el evento.

Gestión de Eventos

Queremos saber cuándo el usuario pulsa el botón. Al pulsarlo, se generará un evento

8. Contrucción de interfaces gráficos en Java 42

Gestión de Eventos

public void cambiarTexto(){button.setText(“ok! has pulsado el botón”);

}

1

2

Pero ¿cómo saber cuándo ha pulsado el botón el usuario?

8. Contrucción de interfaces gráficos en Java 43

Gestión de Eventos (event-handling) ‏

Aplicaciónquiero que me informes

1

el usuario me ha pulsado!2

8. Contrucción de interfaces gráficos en Java 44

Gestión de Eventos

si queremos estar informados sobre los eventos que ocurran en un botón, debemos de implementar un interfaz listener (listener interface)‏

<<interface>>ActionListener

actionPerformed(ActionEvent ev)‏

Page 12: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 45

Gestión de Eventos

aplicación

botón

Ok!, implemento el interfaz ActionListener. Ahora quiero recoger tus eventos.

actionPerformed(ActionEvent ev)‏

<<interfaze>>ActionListener

actionPerformed(ActionEvent ev)‏

registrarse en el botón para “oír”sus eventos

8. Contrucción de interfaces gráficos en Java 46

Gestión de Eventos

Listener

Fuente de

Eventos

button.addActionListener(this)‏

actionPerformed(evento)‏

<<interfaze>>ActionListener

actionPerformed(ActionEvent ev)‏

8. Contrucción de interfaces gráficos en Java 47

Gestión de Eventos

import java.awt.event.*;import javax.swing.*;

public class SimpleGUI extends JFrame implements ActionListener {

JButton button;

public void ekin(){button = new JButton("sakatu hemen");button.addActionListener(this);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().add(button);setSize(300,300);setVisible(true);

}

public static void main(String[] args){SimpleGUI frame = new SimpleGUI();frame.ekin();

}

public void actionPerformed(ActionEvent e) {button.setText("ados! botoia sakatu duzu!");

}

}

8. Contrucción de interfaces gráficos en Java 48

Gestión de Eventos

Siendo un listener:1) debo de implementar un interfaz 2) para oír los eventos del botón, me debo registrar en el botón como listener.3) para responder a los eventos, debo ofrecer un método .

El listener recibirá los eventos

Como fuente de eventos:1) debo aceptar el registro de listerners2) debo admitir acciones de los usuarios3) al recibir una acción del usuario, debo avisar del evento a mis listeners

La fuente de eventos enviará el eventoevento

Ey! Y yo qué?

public void actionPerformed(ActionEvent e) {

Page 13: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java 49

Gestión de Eventos

public void actionPerformed(ActionEvent e) {button.setText("botoia sakatu duzu!");if ( (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0)‏

button.setText(button.getText() + " baita Shift tekla ere!");

}

8. Contrucción de interfaces gráficos en Java 50

Gestión de Eventos

import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;

public class Aukerak2 extends JFrame{

JLabel jLabel1 = new JLabel("Sexua:");JLabel jLabel2 = new JLabel("Aukeratu duzun sexua:");JLabel emaitza = new JLabel();JRadioButton emakumea = new JRadioButton("Emakumea", true);JRadioButton gizona = new JRadioButton("Gizona", false);ButtonGroup bg = new ButtonGroup();

public Aukerak2() {super("Gertaerak kudeatzen...");

}

public void go(){bg.add(emakumea);bg.add(gizona);emakumea.addActionListener(new GertaeraKudeatzaile());gizona.addActionListener(new GertaeraKudeatzaile());this.getContentPane().setLayout(new FlowLayout());getContentPane().add(jLabel1,null);getContentPane().add(emakumea,null);getContentPane().add(gizona,null);getContentPane().add(jLabel2,null);getContentPane().add(emaitza,null);setSize(300,200);setVisible(true);

}

public class GertaeraKudeatzaile implements ActionListener {

public void actionPerformed(ActionEvent e) {emaitza.setText(e.getActionCommand());

}}

public static void main(String[] args){Aukerak2 proba = new Aukerak2();proba.go();proba.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}

8. Contrucción de interfaces gráficos en Java 51

Gestión de Eventos

public void go(){bg.add(emakumea);bg.add(gizona);emakumea.addActionListener(new GertaeraKudeatzaile());gizona.addActionListener(new GertaeraKudeatzaile());this.getContentPane().setLayout(new FlowLayout());getContentPane().add(jLabel1,null);getContentPane().add(emakumea,null);getContentPane().add(gizona,null);getContentPane().add(jLabel2,null);getContentPane().add(emaitza,null);setSize(300,200);setVisible(true);

}

public class GertaeraKudeatzaile implements ActionListener {

public void actionPerformed(ActionEvent e) {emaitza.setText(e.getActionCommand());

}}

public void go(){bg.add(emakumea);bg.add(gizona);emakumea.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {emaitza.setText(e.getActionCommand());

}});

gizona.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {

emaitza.setText(e.getActionCommand()); }});this.getContentPane().setLayout(new FlowLayout());getContentPane().add(jLabel1,null);getContentPane().add(emakumea,null);getContentPane().add(gizona,null);getContentPane().add(jLabel2,null);getContentPane().add(emaitza,null);setSize(300,200);setVisible(true);}

8. Contrucción de interfaces gráficos en Java

Componentes gráficos y Listeners (observadores) ‏

• Un componente gráfico puede aceptar el registro de

objetos observadores (listeners) que implementen el

interfaz adecuado

addXXXListener()‏

- Por ejemplo:

addActionListener(ActionListener observador) ‏

addItemListener(ItemListener observador)‏

Page 14: Awt Swing Teoria

8. Contrucción de interfaces gráficos en Java

Componentes gráficos y Listeners (observadores) ‏

• Algunos observadores (listeners) disponen de numerosos métodos, siendo probable que no necesitemos usar todos (dado que no queremos responder a todo posible evento)

• Java, no obstante, obliga a implementar todos los métodos de un interfaz

• Para evitar esa situación (usar sólo un método de un interfaz, pero tener que programarlos todos), Java ofrece clases Adapter.

8. Contrucción de interfaces gráficos en Java

Componentes gráficos y Listeners (observadores) ‏

• Una clase Adapter implementa todos los métodos de un interfaz, dejándolos con un cuerpo vacío.

• Ejemplo: si sólo quiero gestionar el cierre de una ventana:myframe.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent winEvt) {

System.exit(0); } } );

Frente a implementar (usando WindowListener)void windowActivated(WindowEvent e);

void windowClosed(WindowEvent e)

void windowClosing(WindowEvent e)

void windowDeactivated(WindowEvent e)

void windowDeiconified(WindowEvent e)

void windowIconified(WindowEvent e)

void windowOpened(WindowEvent e)