Interfaces Graficas
-
Upload
jeank-duque -
Category
Documents
-
view
22 -
download
0
Transcript of Interfaces Graficas
-
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)