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

Interfaces Graficas

Embed Size (px)

Citation preview

  • Contruccin de interfacesgrficas en Java

    AWT y Swing

    1.

    8. Contruccin de interfaces grficos en Java 2

    ndice

    Introduccin Objetivos Jerarquia de clases: patrn de diseo COMPOSITE

    Componentes principales Contenedores AWT/Swing Componentes AWT/Swing Gestores de diseo

    Gestin de eventos Clases Listener Clases Adapter

    Patrn de diseo MVC

    8. Contruccin de interfaces grficos en Java 3

    Introduccin

    Cualquier lenguaje de programacin moderno ofrece herramientas para la contruccin de interfaces grficas de usuario (GUI).

    Java permite al programador: El diseo y programacin de interfaces grficas de usuario de

    forma rpida y sencilla. El paquete de clases AWT (Abstract Window Toolkit) El paquete de clases Swing

    Swing es una evolucin de AWT, ofreciendo ms clases y una mayor flexibilidad.

    8. Contruccin de interfaces grficos en Java 4

    Objetivos

    Entender el diseo de la jerarqua de clases Java que se utilizan para la construccin de GUIs.

    Entender cmo se realiza la gestin de eventos.

    Aprender a usar un entorno de programacin (Eclipse, Jbuilder, Jdeveloper...) para construir GUIs

    No es un objetivo:- conocer todos los nombres de clases, interfaces y dems componentes grficos

    Evento

  • 8. Contruccin de interfaces grficos en Java 5

    AWT: componentes principales

    Jerarqua de clases AWT

    COMPONENTE

    CONTENEDOR(los contenedores son componentes)

    8. Contruccin de interfaces grficos en Java 6

    Jerarqua de clases AWT : patrn de diseo COMPOSITE

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

    texto, 3 botones y 2 reas de texto, adems de un panel que contiene 5 casillas de verificacin y una lista desplegable.

    - Una ventana con 2 etiquetas, 2 reas de texto y un botn.

    - ...

    8. Contruccin de interfaces grficos en Java 7

    Jerarqua de clases AWT : patrn de diseo COMPOSITE

    8. Contruccin de interfaces grficos en Java 8

    Jerarqua de clases AWT : un diseo como el siguiente sera incorrecto...

    En un Frame, necesitaramos disponer de los mtodos addButton, addCheckBox, addTextField, addFrame,... .

    Adems, el diagrama no est en absoluto completo, dado que Button puede ser un componente de Panel, o de Dialog, ... y el diseo anterior no lo contempla.

    Si se quisiera aadir un nuevo componente XXX, deberamos de cambiar la clase Frame y aadir el mtodo addXXX (esta solucin no sera nada extensible)

    Button

    TextField

    CheckBox

    *

    *

    * Frame

    * ...

  • 8. Contruccin de interfaces grficos en Java 9

    Jerarqua de clases AWT: patrn de diseo COMPOSITE

    Un contenedor est formado por componentes, siend stos componentes concretos o contenedores. A su vez, estos contenedores podran tener distintos componentes, etc.

    Contenedor

    add (Componente c) --El mtodo add --aade un componente--al contenedor

    Componente

    Comp.Concreto1 CompConcretoN Contenedor

    ContConcreto1 ContConcreto2

    8. Contruccin de interfaces grficos en Java 10

    Swing: componentes principales

    8. Contruccin de interfaces grficos en Java 11

    AWT/Swing: contenedores

    Contenedores

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

    minimizar y cerrarla. Se le puede aadir un ttulo. nico contenedor al que se le pueden aadir mens.

    Clases Panel/JPanel Contenedores genricos 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 aade

    automticamente un Panel. En AWT no.

    el principalFrame/JFramePanel/JPanelDialog/JDialog

    8. Contruccin de interfaces grficos 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 aplicacin

    Dentro de la clase JFrame se aade un Panel automticamente

  • 8. Contruccin de interfaces grficos en Java 13

    Componentes principales AWT/Swing

    Clases TextField/JTextField Campo de entrada de texto de una sla lnea.

    Clases TextArea/JTextArea Permiten introducir lneas de texto mltiples Se puede usar tambin para mostrar resultados (texto) La clase JTextArea no implementa un scroll automtico. Es

    necesario aadirlo dentro de un JScrollPane. TextArea, sin embargo, s lo implementa.

    8. Contruccin de interfaces grficos 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. Contruccin de interfaces grficos en Java 15

    Cmo analizar/entender el API Java

    8. Contruccin de interfaces grficos en Java 16

    Componentes principales de AWT/Swing

    Clases Button/JButton Se usa para construir Botones. Al pulsar un botn se generar un evento, que habr que

    tratar.

    Clases Label/JLabel Utilizado para mostrar informacin. Se usan junto a los cuadros de texto.

  • 8. Contruccin de interfaces grficos 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. Contruccin de interfaces grficos en Java 18

    Componentes principales AWT/Swing

    Clases CheckBox/JCheckBox/JRadioButton

    Casillas de verificacin. Ofrecen funcionalidad para activar y desactivar opciones.

    Los componentes JRadioButton los agruparemos en un ButtonGroup para conseguir seleccionar una (y slo una) opcin del grupo. ButtonGroup no es un componente visual.

    8. Contruccin de interfaces grficos 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 agrupacin de botonesButtonGroup aukeraBotoiMultzoa = new ButtonGroup();aukeraBotoiMultzoa.add(goizez);aukeraBotoiMultzoa.add(arratsaldez);// Crear lista desplegable y cargarla de datosVector astegunak = new Vector();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 botnthis.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. Contruccin de interfaces grficos 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);

    }}

  • 8. Contruccin de interfaces grficos 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 saturacin de informacin en pantalla.

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

    8. Contruccin de interfaces grficos 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. Contruccin de interfaces grficos en Java 23

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

    JPanel jPanel1 = new JPanel();JList jList1;Vector elementuak = new Vector();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

  • 8. Contruccin de interfaces grficos en Java 25

    AWT/Swing: componentes principales

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

    Vector elementuak = new Vector();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. Contruccin de interfaces grficos en Java 26

    AWT/Swing: componentes principales

    Creacin de Mens En Swing

    El nico contenedor que puede alojar una barra de menes JFrame .

    La clase JMenuBar crea la barra de men donde se insertarn las opciones de dicho men.

    La clase JMenu es la encargada de crear los mens. Estos mens 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 mens en cascada)

    8. Contruccin de interfaces grficos en Java 27

    AWT/Swing: componentes principales

    Creacin de mens en Swing

    JMenuJMenu JMenuBar

    JMenuItemJMenuItem

    8. Contruccin de interfaces grficos 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);

    }}

  • 8. Contruccin de interfaces grficos en Java 29

    AWT/Swing: componentes principales

    Insercin de imgenes 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. Contruccin de interfaces grficos en Java 30

    AWT/Swing: componentes principales

    Creacin dinmica 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

  • 8. Contruccin de interfaces grficos en Java 33

    Gestores de Diseo: 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. Contruccin de interfaces grficos 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 Diseo: LayoutjPanel1

    jPanel2jPanel3

    8. Contruccin de interfaces grficos en Java 35

    Gestores de Diseo: Layout

    Ventajas de definir un GUI con gestor de diseo: los componentes se redibujan automticamente al ajustar el

    tamao de la ventana (ajustndose al tamao disponible).

    8. Contruccin de interfaces grficos en Java 36

    Gestores de Diseo: Layout

    Sin gestor de diseo se definen las coordenadas de todos los componentes fcil 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));//...

  • 8. Contruccin de interfaces grficos en Java 37

    Gestores de Diseo: Layout

    Desventajas de no usar un gestor de diseo: Al redimensionar el Frame, los componentes se mantienen sin

    cambiar su posicin (no se ajustarn al tamao disponible).

    8. Contruccin de interfaces grficos 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 dilogo siga activo.

    Clase JFileChooser (Swing)

    8. Contruccin de interfaces grficos en Java 39

    Gestin de Eventos

    Al disear un interfaz grfico debemos de tener en cuenta que a consecuencia de las acciones del usuario se generarn distintos eventos.

    Se deben de programar mtodos para responder a estos eventos provocados por el usuario.

    Un evento: es generado por una accin del usuario. est ligado a un componente del GUI. Ejemplos:

    pulsar una tecla, mover el ratn, cambiar el tamao de una ventana, cerrarla, minimizarla, pulsar un botn, perder u obtener el foco de un componente, cambiar el valor de un campo de texto, elegir una opcin de men...

    8. Contruccin de interfaces grficos 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();

    }

    }

    Gestin de Eventos

  • 8. Contruccin de interfaces grficos en Java 41

    Si queremos hacer algo cuando se pulse el botn: 1) deberemos de programar un mtodo , para responder al evento que se genera.2) tendremos que saber cundo se genera el evento.

    Gestin de Eventos

    Queremos saber cundo el usuario pulsa el botn. Al pulsarlo, se generar un evento

    8. Contruccin de interfaces grficos en Java 42

    Gestin de Eventos

    public void cambiarTexto(){button.setText(ok! has pulsado el botn);

    }

    1

    2

    Pero cmo saber cundo ha pulsado el botn el usuario?

    8. Contruccin de interfaces grficos en Java 43

    Gestin de Eventos (event-handling)

    Aplicacinquiero que me informes

    1

    el usuario me ha pulsado!2

    8. Contruccin de interfaces grficos en Java 44

    Gestin de Eventos

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

    ActionListener

    actionPerformed(ActionEvent ev)

  • 8. Contruccin de interfaces grficos en Java 45

    Gestin de Eventos

    aplicacin

    botn

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

    actionPerformed(ActionEvent ev)

    ActionListener

    actionPerformed(ActionEvent ev)

    registrarse en el botn para orsus eventos

    8. Contruccin de interfaces grficos en Java 46

    Gestin de Eventos

    Listen

    erFuente de

    Eventos

    button.addActionListener(this)

    actionPerformed(evento)

    ActionListener

    actionPerformed(ActionEvent ev)

    8. Contruccin de interfaces grficos en Java 47

    Gestin 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. Contruccin de interfaces grficos en Java 48

    Gestin de Eventos

    Siendo un listener:1) debo de implementar un interfaz 2) para or los eventos del botn, me debo registrar en el botn como listener.3) para responder a los eventos, debo ofrecer un mtodo .

    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 accin 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) {

  • 8. Contruccin de interfaces grficos en Java 49

    Gestin 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. Contruccin de interfaces grficos en Java 50

    Gestin 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. Contruccin de interfaces grficos en Java 51

    Gestin 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. Contruccin de interfaces grficos en Java

    Componentes grficos y Listeners (observadores)

    Un componente grfico puede aceptar el registro de

    objetos observadores (listeners) que implementen el

    interfaz adecuado

    addXXXListener()

    - Por ejemplo:

    addActionListener(ActionListener observador)

    addItemListener(ItemListener observador)

  • 8. Contruccin de interfaces grficos en Java

    Componentes grficos y Listeners (observadores)

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

    Java, no obstante, obliga a implementar todos los mtodos de un interfaz

    Para evitar esa situacin (usar slo un mtodo de un interfaz, pero tener que programarlos todos), Java ofrece clases Adapter.

    8. Contruccin de interfaces grficos en Java

    Componentes grficos y Listeners (observadores)

    Una clase Adapter implementa todos los mtodos de un interfaz, dejndolos con un cuerpo vaco.

    Ejemplo: si slo 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)