Interfaz Gráfica en Java

40
Topicos Selectos de Programación Interfaz Gráfica en Java José Luís García Cerpas

Transcript of Interfaz Gráfica en Java

Page 1: Interfaz Gráfica en Java

Top

icos S

ele

cto

s d

e

Pro

gra

mació

n

Interfaz Gráfica en Java

José Luís García Cerpas

Page 2: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nInterfaz gráfica de usuario

En java, los programas basados en GUI se implementan con el uso de las clases provenientes de los paquetes estándar javax.swing y java.awt. A ellos se les referirá Colectivamente como clases GUI.

Generalmente se prefiere utilizar las clases Swing llamadas clases de peso ligero sobre las clases AWT llamadas clases de peso pesado.

Page 3: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nDiferencia entre AWT y swing

Las clases swing proporcionan mayor compatibilidad a través de diferentes sistemas operativos. Se implementan completamente en Java.

Las clases AWT se implementan con el uso de los objetos GUI nativos. por ejemplo un AWT button se implementa con el uso del objeto Windows button, Macintosh button, etc

Page 4: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEventos

Un evento ocurre cuando el usuario interactúa con un objeto GUI. Por ejemplo, cuando usted mueve el cursor, oprime el botón o selecciona una opción de menu.

Los objetos se programan para responder a dichos eventos al definir métodos de manejo de eventos.

Page 5: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEntrada / salida simple

Una de las formas más sencillas para proporcionar entrada y salida simple con base en GUI es el uso de la clase JOptionPane.

JOptionPane.showMessageDialog(null,”Hola Mundo Java”);

Page 6: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEntrada / salida simple (cont..)

Tambien se puede usar la clase JOptionPane para entrada al usar su método showInputDialog.

String entrada;

entrada = JOptionPane.showInputDialog(null, “Introduce tu nombre”);

Page 7: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEjemplo de ventana

import javax.swing.JFrame;

class Ejemplo{ public Ejemplo() { JFrame x = new JFrame("Primera Ventana"); x.setSize(300,300); x.setLocation(150,200); x.setVisible(true); x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String [] args) { new Ejemplo(); }}

Page 8: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEjemplo de ventana (usando herencia)

import javax.swing.JFrame;

class Ejemplo extends JFrame {

public Ejemplo() { super("Primera Ventana");//constructor JFrame setSize(300,300); setLocation(150,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String [] args) { new Ejemplo(); }

Page 9: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nDespliegue de la ventana

Page 10: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nDespliegue de la ventana

Todas las propiedades de la ventana se establecen en el constructor por defecto, para establecer el título se pasa al método setTitle(), para establecer el tamaño setSize(), para establecer la esquina superior izquierda del marco en la coordenada, se pasan los valores x y y al método setLocation. Finalmente para terminar la ventana cuando el marco se cierre, se llama setDefaultCloseOperation()

Page 11: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nMostrando ventana con color

import javax.swing.JFrame;import java.awt.Container;import java.awt.Color;

class Ejemplo extends JFrame {

public Ejemplo() { super("Primera Ventana"); setSize(300,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contenidoPanel = getContentPane(); contenidoPanel.setBackground(Color.BLUE); setVisible(true); } public static void main(String [] args) { new Ejemplo(); }}

Page 12: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nColocando un botón

Existen dos enfoques generales a la colocación de botones (otros), en el panel de contenido, uno que usa un manejador de presentación otro que no lo utiliza. El manejador de presentación es un objeto que controla la colocación de los objetos GUI. Si no se usa manejador de presentación, entonces los objetos GUI se colocan al especificar explícitamente su posición y tamaño en el panel de contenido posicionamiento absoluto.

Page 13: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nColocando botones

(FlowLayout) Primero se especifica el manejador de presentación

del panel de contenido:

ContenidoPanel.setLayout(new FlowLayout());

Después, se agregan los botones al panel.

contenidoPanel.add(botonBien);

contenidoPanel.add(botonCancela);

Page 14: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nColocando botones

Puesto que el tamaño por defecto de un botón depende del número de caracteres en la etiqueta del botón, los tamaños de los dos botones serán diferentes. Se puede superar si se llama al método setSize.

botonMostrar.setSize(80,30);

botonSalir.setSize(80,30);

Page 15: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nColocando botones

public Ejemplo(){super("Primera Ventana");setLocation(150,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container contenidoPanel = getContentPane();contenidoPanel.setBackground(Color.BLUE);contenidoPanel.setLayout(new FlowLayout());botonMostrar = new JButton("Mostrar");botonSalir = new JButton("Salir");contenidoPanel.add(botonMostrar);contenidoPanel.add(botonSalir);botonMostrar.setSize(80,30);botonSalir.setSize(80,30);pack(); //toma el tamaño justo de los componentessetVisible(true);

}

Page 16: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nManejo de eventos del botón

Un objeto GUI, donde el evento ocurre se llama evento, o simplemente la fuente del evento.

Cuando un evento se genera, el sistema notifica a los receptores de eventos relevantes.

Un objeto receptor de evento, es un objeto que incluye un método que se ejecuta en respuesta a los eventos generados.

Page 17: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

n

Programación del evento presionar botón en el objeto miBoton

botonMostrar.addActionListener( new ActionListener(){ public void actionPerformed (ActionEvent e){ JOptionPane.showMessageDialog (null, “Mensaje“, "Atención", JOptionPane.INFORMATION_MESSAGE);}});

Page 18: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nevent source y event listener

El modelo de eventos de Java está basado en que los objetos sobre los que se producen los eventos (event sources) “registran” los objetos que habrán de gestionarlos (event listeners), para lo cual los event listeners habrán de disponer de los métodos adecuados.

Estos métodos se llamarán automáticamente cuando se produzca el evento. La forma de garantizar que los event listeners disponen de los métodos apropiados para gestionar los eventos es obligarles a implementar una determinada interface Listener.

Las interfaces Listener se corresponden con los tipos de eventos que se pueden producir. los distintos tipos de eventos y los métodos de las interfaces Listener que hay que definir para gestionarlos.

Page 19: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEventos de alto nivel

Los eventos de alto nivel se llaman también eventos semánticos, porque la acción de la que derivan tiene un significado en sí misma, en el contexto de las interfaces gráficas de usuario. Los eventos de bajo nivel son las acciones elementales que hacen posible los eventos de alto nivel.

Son eventos de alto nivel los siguientes eventos: los cuatro que tienen que ver con hacer clic sobre botones o elegir comandos en menús (ActionEvent), cambiar valores en barras de desplazamiento (AdjustmentEvent), elegir valores (ItemEvents) y cambiar el texto (TextEvent)

Page 20: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEventos de bajo nivel

Los eventos de bajo nivel son los que se producen con las operaciones elementales con el , teclado, containers y windows.

Las seis clases de eventos de bajo nivel son los eventos relacionados con componentes (ComponentEvent), con los containers (ContainerEvent), con pulsar teclas (KeyEvent), con mover, arrastrar, pulsar y soltar con el ratón (MouseEvent), con obtener o perder el foco (FocusEvent) y con las operaciones con ventanas (WindowEvent).

Page 21: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nJerarquía de eventos en java

Page 22: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nInterfaces Listener

Cada objeto que puede recibir un evento (event source), “registra” uno o más objetos para que los gestionen (event listener). Esto se hace con un método que tiene la forma, eventSourceObject.addEventListener(eventListenerObject);

donde eventSourceObject es el objeto en el que se produce el evento, y eventListenerObject es el objeto que deberá gestionar los eventos. La relación entre ambos se establece a través de una interface Listener que la clase del eventListenerObject debe implementar

Page 23: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nInterfaces Listener

A diferencia de una clase, una interfaz Java sólo incluye constantes y métodos abstractos. Por ejemplo, la clase Ejemplo, se define como sigue:

Se implementa la interfaz ActionListener

class Ejemplo extends JFrame implements ActionListener

Se llama al método addActionListener de botonMostrar

botonMostrar.addActionListener(this);

Se escribe el código que responda al evento

public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog (null,"Ha presionado el botón <mostrar>","Atención", JOptionPane.INFORMATION_MESSAGE);}

Page 24: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

n import javax.swing.JFrame;

import javax.swing.JButton;import java.awt.Container;import java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JOptionPane;

class Ejemplo extends JFrame implements ActionListener {

public Ejemplo() { super("Primera Ventana"); setLocation(150,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contenidoPanel = getContentPane(); contenidoPanel.setBackground(Color.BLUE); contenidoPanel.setLayout(new FlowLayout()); botonMostrar = new JButton("Mostrar"); botonSalir = new JButton("Salir"); contenidoPanel.add(botonMostrar); contenidoPanel.add(botonSalir); botonMostrar.setSize(80,30); botonSalir.setSize(80,30); botonMostrar.addActionListener(this); pack(); //toma el tamaño justo de los componentes setVisible(true); } public void actionPerformed(ActionEvent e) { //Mostrar una caja de diálogo que muestre un mensaje... JOptionPane.showMessageDialog (null,"Ha presionado el botón <mostrar>","Atención", JOptionPane.INFORMATION_MESSAGE); }

public static void main(String [] args) { new Ejemplo(); } private JButton botonMostrar; private JButton botonSalir;}

Page 25: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nClases Adapter

Java proporciona ayudas para definir los métodos declarados en las interfaces Listener. Una de estas ayudas son las clases Adapter, que existen para cada una de las interfaces Listener que tienen más de un método.

Su nombre se construye a partir del nombre de la interface, sustituyendo la palabra “Listener” por “Adapter”.

Hay 7 clases Adapter: ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter y WindowAdapter.

Page 26: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nimport javax.swing.JFrame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; class VentanaCerrable2 extends JFrame { public VentanaCerrable2(String title){ super(title); setSize(200,300); getContentPane().setSize(500,500); CerrarVentana cv = new CerrarVentana(); this.addWindowListener(cv); setVisible(true); } public static void main(String [] args){ new VentanaCerrable2("Ventana"); } } class CerrarVentana extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } }

Page 27: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nClases Adapter

Todavía hay otra forma de responder al evento que se produce cuando el usuario desea cerrar la ventana. Las clases anónimas de Java son especialmente útiles en este caso.

En realidad, para gestionar eventos sólo hace falta un objeto que sea registrado como event listener y contenga los métodos adecuados de la interface Listener.

Las clases anónimas son útiles cuando sólo se necesita un objeto de la clase:new WindowAdapter()

Page 28: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nimport javax.swing.JFrame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; class VentanaCerrable3 extends JFrame { public VentanaCerrable3(String title) { super(title); setSize(200,300); getContentPane().setSize(500,500); CerrarVentana cv = new CerrarVentana();

this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setVisible(true); } public static void main(String [] args){ new VentanaCerrable3("Ventana"); }}

Page 29: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nVentanas con imágenes

Page 30: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nVentanas con imágenes

Un objeto de tipo java.awt.Graphics define el contexto en el que se dibuja e incluye métodos para dibujar distintos tipos de figuras.

El método Graphics.drawImage() nos permite dibujar imágenes en formato GIF, JPG o PNG

Las imágenes podemos leerlas con el método getImage() de la clase java.awt.Toolkit.

La redefinición del método paint(), el cual se invoca automáticamente por el sistema cuando la ventana que lo incluye pasa a un primer plano.

Page 31: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nimport javax.swing.JPanel;import java.awt.Toolkit;import java.awt.Graphics;import java.awt.Image;import javax.swing.JFrame;

class ImagePanel extends JPanel{ public ImagePanel() //constructor { img = Toolkit.getDefaultToolkit().getImage( "java.jpg" ); } public void paint(Graphics g){ super.paint(g); g.drawImage(img,0,0,this); }}public class ImageFrame extends JFrame{ public ImageFrame(){ setSize(500,500); panel = new ImagePanel(); getContentPane().add(panel); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String [] args){ JFrame frame = new ImageFrame(); frame.setVisible(true); } private ImagePanel panel; private Image img;}

Page 32: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nComponentes GUI relacionados con el texto

Las tres clases SWING que tratan con el texto son : JLabel, JTextField y JTextArea, las primeras dos tratan con sólo una línea de texto. Un objeto TextField permite al usuario ingresar una sola línea de texto, mientras que un objeto JLabel es para desplegar texto no editable. Un objeto JTextArea permite al usuario ingresar múltiples líneas de texto.

Page 33: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nEjemplo

Creación de la ventanaJFrame ventana = new JFrame(tituloVentana);

Creación de una etiquetaJLabel etiqueta = new JLabel("Mensaje en una etiqueta");

Ligar la etiqueta a la ventanaventana.getContentPane().add(etiqueta);

barra de titulo controles de la ventana

bordeetiqueta

Page 34: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nValidar la entrada en un JTextField

Para validar que solamente se permitan introducir números se añade el siguiente evento al JTextField.

Se debe añadir al control el evento keyTyped(KeyEvent ); el cual es invocado cuando se pulsa una tecla.

Page 35: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

n import javax.swing.JFrame;

import javax.swing.JLabel;import javax.swing.JTextField;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;

class Validar extends JFrame{ public Validar(){ JLabel label = new JLabel("Escribe un numero"); label.setBounds(10,10,200,10); JTextField texto = new JTextField(); texto.setBounds(10,30,100,20); texto.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ char caracter = e.getKeyChar(); // Verificar si la tecla pulsada no es un digito if(((caracter < '0') ||(caracter > '9')) && (caracter != KeyEvent.VK_BACK_SPACE)){ e.consume(); // ignorar el evento de teclado } } }); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); setSize(300,300); getContentPane().add(label); getContentPane().add(texto); setVisible(true); } public static void main(String [] args){ new Validar(); }}

Page 36: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nMétodos relacionados

JTextField

Page 37: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nJCheckBox y JCheckBoxGroup

Page 38: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nJButton

Page 39: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nJComboBox

Presenta una caja de combinación. Esta clase es similar a la clase JRadioButton en que también permite al usuario seleccionar un ítem de una lista de posibles opciones:

String [] item = {“Java”,”c++”,”Pascal”};

JComboBox caja = new JComboBox(item);

Para encontrar el ítem actualmente seleccionado:

String x = (String) caja.getSelectedItem();

Page 40: Interfaz Gráfica en Java

Tóp

icos S

ele

cto

s d

e

Pro

gra

mació

nBibliografía

Programación en Java C. Thomas Wu Mc Graw Hill