You are on page 1of 14

1.

Contruccin de interfaces grficas en Java AWT y Swing

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

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.

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

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

8. Contruccin de interfaces grficos en Java

AWT: componentes principales Jerarqua de clases AWT


COMPONENTE

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. - ...

CONTENEDOR
(los contenedores son componentes)

8. Contruccin de interfaces grficos en Java

8. Contruccin de interfaces grficos en Java

Jerarqua de clases AWT : patrn de diseo COMPOSITE

Jerarqua de clases AWT :

un diseo como el siguiente sera incorrecto...


Button CheckBox TextField * * * Frame *

...

8. Contruccin de interfaces grficos en Java

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

Jerarqua de clases AWT: patrn de diseo COMPOSITE


Componente

Swing: componentes principales

Comp.Concreto1

CompConcretoN

Contenedor

Contenedor add (Componente c)


--El mtodo add --aade un componente --al contenedor

ContConcreto1

ContConcreto2

8. Contruccin de interfaces grficos en Java

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

8. Contruccin de interfaces grficos en Java

10

AWT/Swing: contenedores
Frame/JFrame Panel/JPanel Dialog/JDialog el principal

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); } }

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

Dentro de la clase JFrame se aade un Panel automticamente Al cerrar el JFrame, terminar la aplicacin

11

8. Contruccin de interfaces grficos en Java

12

Componentes principales AWT/Swing Clases TextField/JTextField


Campo de entrada de texto de una sla lnea.

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

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.

Ojo...

8. Contruccin de interfaces grficos en Java

13

14

Cmo analizar/entender el API Java

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

15

8. Contruccin de interfaces grficos en Java

16

Componentes principales AWT/Swing


import javax.swing.*; import java.awt.*; public class Botoiak { JButton jButton1 = JButton jButton2 = JButton jButton3 = extends JFrame new JButton(); new JButton(); new JButton();

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.

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

17

8. Contruccin de interfaces grficos en Java

18

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();

AWT/Swing: componentes principales


jRadioButton1 jComboBox1 jRadioButton2
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 eraiki public 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 gehitu jPanel1.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 gehitu g.add(jRadioButton1); g.add(jRadioButton2); this.getContentPane().add(jPanel1, null); } }

jPanel2

// Crear botones radiales JRadioButton goizez = new JRadioButton("Goizez",true); JRadioButton arratsaldez = new JRadioButton("Arratsaldez",false); // Crear agrupacin de botones ButtonGroup aukeraBotoiMultzoa = new ButtonGroup(); aukeraBotoiMultzoa.add(goizez); aukeraBotoiMultzoa.add(arratsaldez); // Crear lista desplegable y cargarla de datos Vector<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 panel2 jPanel2.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 botn this.setSize(320,200); this.getContentPane().add(BorderLayout.NORTH, jPanel2); this.getContentPane().add(BorderLayout.CENTER,jTextArea1); this.getContentPane().add(BorderLayout.SOUTH, aButton); this.setVisible(true); }

jTextArea1 jButton1

JPanel

8. Contruccin de interfaces grficos en Java

19

8. Contruccin de interfaces grficos en Java

20

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.

AWT/Swing: componentes principales


import javax.swing.*; import java.awt.*; import java.util.*; public class Listak extends JFrame { JList jList1; //new gero egingo da Vector 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

8. Contruccin de interfaces grficos en Java

21

22

AWT/Swing: componentes principales


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

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.

23

8. Contruccin de interfaces grficos en Java

24

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

AWT/Swing: componentes principales Creacin de Mens


En Swing
El nico contenedor que puede alojar una barra de men es 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

26

AWT/Swing: componentes principales Creacin de mens en Swing


JMenu JMenu JMenuBar

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 }

JMenuItem JMenuItem

8. Contruccin de interfaces grficos en Java

27

28

AWT/Swing: componentes principales


Insercin de imgenes Meteremos la imagen en un JLabel

AWT/Swing: componentes principales


Creacin dinmica de componentes
import 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. Contruccin de interfaces grficos en Java } }

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"); 8. Contruccin de interfaces grficos en 140, Java 160, 30)); jButton2.setBounds(new Rectangle(180, this.getContentPane().add(jButton2, null);

29

30

Gestores de Diseo: Layout Se usan para definir dnde colocar un componente dentro de un contenedor.
edukiontzia.add(osagaia);

Gestores de Diseo: Layout Si se quiere poner el componente en unas coordenadas concretas, se debe de eliminar el gestor de diseo.
osagaia.setLayout(null);

FlowLayout (Gestor predeterminado para Panel)


Los componentes se van aadiendo a una lnea. Al completar la lnea, se pasa a la siguiente.

BorderLayout (Gestor predeterminado para Frame y Dialog )


Los componentes se aaden en una de estas 5 zonas: norte, sur, este, oeste y centro.

Sean this un contenedor y textField1 uno de sus componentes:


setLayout(null); textField1.setBounds(15,20,50,60);
x y zabalera altuera

Se puede cambiar el gestor predeterminado:


edukiontzia.setLayout(new BorderLayout());
8. Contruccin de interfaces grficos en Java

31

8. Contruccin de interfaces grficos en Java

32

Gestores de Diseo: Layout


Etiqueta en BorderLayout.NORTH Panel con BorderLayout

Gestores de Diseo: Layout


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

jPanel1

jPanel2

jPanel3

Panel en BorderLayout.CENTER. Este panel Panel en BorderLayout.SOUTH. ste panel tiene un FlowLayout. tiene un GridLayout(4,3)
8. Contruccin de interfaces grficos en Java

33

34

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).

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, jRadioButton2.setText("B"); jRadioButton2.setBounds(new Rectangle(14, jRadioButton3.setText("C"); jRadioButton3.setBounds(new Rectangle(14, jButton1.setText("A1"); jButton1.setBounds(new Rectangle(139, 10, 8. Contruccin de interfaces grficos en Java //... 10, 49, 23)); 40, 58, 23)); 70, 55, 23)); 80, 23));

8. Contruccin de interfaces grficos en Java

35

36

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).

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

37

8. Contruccin de interfaces grficos en Java

38

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

Gestin de Eventos
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(); } } {

39

8. Contruccin de interfaces grficos en Java

40

Gestin de Eventos
1

Gestin de Eventos

public void cambiarTexto(){ Queremos saber cundo el usuario pulsa el botn. Al pulsarlo, se generar un evento button.setText(ok! has pulsado el botn); }

2
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.

Pero cmo saber cundo ha pulsado el botn el usuario?

8. Contruccin de interfaces grficos en Java

41

8. Contruccin de interfaces grficos en Java

42

<<interface>> ActionListener

Gestin de Eventos (event-handling)

Gestin de Eventos

actionPerformed(ActionEvent ev)

Aplicacin

quiero que me informes

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

el usuario me ha pulsado!

8. Contruccin de interfaces grficos en Java

43

8. Contruccin de interfaces grficos en Java

44

<<interfaze>> ActionListener

<<interfaze>> ActionListener

Gestin de Eventos

actionPerformed(ActionEvent ev)

Gestin de Eventos button.addActionListener(this)

actionPerformed(ActionEvent ev)

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

aplicacin
actionPerformed(ActionEvent ev)

botn
registrarse en el botn para or sus eventos

Li

er n s te

actionPerformed(evento)

F Ev uen en t e to de s
46

8. Contruccin de interfaces grficos en Java

45

8. Contruccin de interfaces grficos en Java

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!"); } }

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 .

Como fuente de eventos: 1) debo aceptar el registro de listerners 2) debo admitir acciones de los usuarios 3) al recibir una accin del usuario, debo avisar del evento a mis listeners

Ey! Y yo qu?

evento

La fuente de eventos enviar el evento

public void actionPerformed(ActionEvent e) {

El listener recibir los eventos


8. Contruccin de interfaces grficos en Java

47

8. Contruccin de interfaces grficos en Java

48

Gestin de Eventos

Gestin de Eventos
import import import import import java.awt.BorderLayout; java.awt.FlowLayout; java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.*; 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); } }

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

49

8. Contruccin de interfaces grficos en Java

50

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()); } }

Componentes grficos y Listeners (observadores)


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); } }

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

51

8. Contruccin de interfaces grficos en Java

Componentes grficos y Listeners (observadores)

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

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) 8. Contruccin de interfaces grficos en Java void windowDeactivated(WindowEvent e) void windowDeiconified(WindowEvent e) void windowIconified(WindowEvent e) void windowOpened(WindowEvent e)

You might also like