clase swingparte1

116
Oscar Bedoya [email protected] Programación interactiva

Upload: adrian-espinosa

Post on 17-Feb-2017

52 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Clase swingparte1

Oscar Bedoya

[email protected]

Programación interactiva

Page 2: Clase swingparte1

Interfaces gráficas con Java Swing

Page 3: Clase swingparte1

• Una interfaz gráfica con el usuario (GUI) es un mecanismo incorporado en las aplicaciones para hacer más amigable y entendible la interacción con el usuario

•Las GUIs se crean a partir de componentes, éstos permiten que el usuario interactúe mediante el ratón, teclado y otras formas de entrada.

Swing

Page 4: Clase swingparte1

Estructura de las aplicaciones GUI

•Declarar una clase que herede de la superclase JFrame

•Declarar cada componente que hará parte de la GUI

•Dentro del método constructor, crear y organizar los componentes

•Declarar el método main

Swing

Page 5: Clase swingparte1

Estructura de las aplicaciones GUI

•Declarar una clase que herede de la superclase JFrame

•Declarar cada componente que hará parte de la GUI

•Dentro del método constructor, crear y organizar los componentes

•Declarar el método main

Swing

Page 6: Clase swingparte1

Swing

JFrame

Clase

Clase()

main()

Page 7: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Page 8: Clase swingparte1

Swing

JFrame

GUI

GUI()

main()

Page 9: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Toda GUI debe heredar de la clase JFrame

Page 10: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Se debe DECLARAR cada componente que hará

parte de la GUI

Page 11: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Método constructor

CREAR cada componente y organizarlo de acuerdo a lo

que se requiere

Page 12: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

}

}

Se crea un objeto de la aplicación

Page 13: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Método constructor

Establecer el título de la ventana

Page 14: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Crear el contenedor. Es el espacio que mantiene el contenido de la ventana

Page 15: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Crear el contenedor. Es el espacio que mantiene el contenido de la ventana

Page 16: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Crear el contenedor. Es el espacio que mantiene el contenido de la ventana

Contenedor

Page 17: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

}

Se establecen las dimensiones de la

ventana

Page 18: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

}

}

Algunos componentes que se pueden agregar al contenedor:

•JLabel

•JButton

•JTextField

•JCheckButtton

•JRadioButton

•JList

Page 19: Clase swingparte1

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GUI extends JFrame {

public GUI()

{

super( "Título de la GUI" );

Container contenedor = getContentPane();

contenedor.setLayout( new FlowLayout() );

setSize( 275, 170 );

setVisible( true );

}

public static void main( String a[] )

{

GUI aplicacion = new GUI();

aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

}

}

Algunos componentes que se pueden agregar al contenedor:

•JLabel

•JButton

•JTextField

•JCheckButtton

•JRadioButton

•JList

Declarar

Crear y organizar

Page 20: Clase swingparte1

JLabel (Etiqueta)

•Las etiquetas son componentes que permiten mostrar un mensaje, en texto o gráfico, de tal manera que el usuario tenga una idea más clara de cómo interactuar con la aplicación

Swing

Etiqueta

Etiqueta

Page 21: Clase swingparte1

Swing

Page 22: Clase swingparte1

JLabel (Etiqueta)

•Declarar la etiqueta

private JLabel etiqueta1;

•Crear la etiqueta

Se tienen varias formas

etiqueta1=new JLabel(“Texto de la etiqueta”);

contenedor.add(etiqueta1);

Swing

Page 23: Clase swingparte1

JLabel (Etiqueta)

•Declarar la etiqueta

private JLabel etiqueta1;

•Crear la etiqueta

Se tienen varias formas

etiqueta1=new JLabel(“Texto de la etiqueta”);

contenedor.add(etiqueta1);

Swing

Inicialmente el contenedor está vacío

contenedor.add(etiqueta1);

Page 24: Clase swingparte1

JLabel (Etiqueta)

•Declarar la etiqueta

private JLabel etiqueta1;

•Crear la etiqueta

Se tienen varias formas

etiqueta1=new JLabel(“Texto de la etiqueta”);

etiqueta1.setToolTipText( "Esta es la etiqueta 1" );

contenedor.add(etiqueta1);

Swing

Page 25: Clase swingparte1

JLabel (Etiqueta)

•Declarar la etiqueta

private JLabel etiqueta1;

•Crear la etiqueta

Se tienen varias formas

etiqueta1=new JLabel(“Texto de la etiqueta”);

etiqueta1.setToolTipText( "Esta es la etiqueta 1" );

contenedor.add(etiqueta1);

Swing

El método setToolTipText permite establecer el texto que se mostrará en caso de que el usuario

pase el mouse por encima de la etiqueta

Page 26: Clase swingparte1

JLabel (Etiqueta)

•Declarar la etiqueta

private JLabel etiqueta1;

•Crear la etiqueta

Se tienen varias formas

etiqueta1=new JLabel(“Texto de la etiqueta”);

etiqueta1.setToolTipText( "Esta es la etiqueta 1" );

contenedor.add(etiqueta1);

Swing

Page 27: Clase swingparte1

Otra forma consiste en crear una etiqueta con icono

Icon imagen = new ImageIcon( "image1.gif" );

etiqueta2 = new JLabel( "Etiqueta con texto e icono“);

etiqueta2.setIcon(imagen);

etiqueta2.setHorizontalTextPosition(SwingConstants.RIGHT);

etiqueta2.setToolTipText( "Esta es la etiqueta2" );

contenedor.add( etiqueta2 );

Swing

Page 28: Clase swingparte1

Otra forma consiste en crear una etiqueta con icono

Icon imagen = new ImageIcon( "image1.gif" );

etiqueta2 = new JLabel( "Etiqueta con texto e icono“);

etiqueta2.setIcon(imagen);

etiqueta2.setHorizontalTextPosition(SwingConstants.RIGHT);

etiqueta2.setToolTipText( "Esta es la etiqueta2" );

contenedor.add( etiqueta2 );

Swing

Page 29: Clase swingparte1

Otra formaetiqueta3 = new JLabel();

etiqueta3.setText( "Etiqueta con icono y texto en parte inferior" );

etiqueta3.setIcon( imagen );

etiqueta3.setVerticalTextPosition( SwingConstants.BOTTOM );

etiqueta3.setToolTipText( "Esta es la etiqueta3" );

contenedor.add( etiqueta3 );

Swing

Page 30: Clase swingparte1

Otra formaetiqueta3 = new JLabel();

etiqueta3.setText( "Etiqueta con icono y texto en parte inferior" );

etiqueta3.setIcon( imagen );

etiqueta3.setVerticalTextPosition( SwingConstants.BOTTOM );

etiqueta3.setToolTipText( "Esta es la etiqueta3" );

contenedor.add( etiqueta3 );

Swing

El texto debe aparecer debajo del icono

Page 31: Clase swingparte1

Otra formaetiqueta3 = new JLabel();

etiqueta3.setText( "Etiqueta con icono y texto en parte inferior" );

etiqueta3.setIcon( imagen );

etiqueta3.setVerticalTextPosition( SwingConstants.BOTTOM );

etiqueta3.setToolTipText( "Esta es la etiqueta3" );

contenedor.add( etiqueta3 );

Swing

Las constantes de posición horizontal en SwingConstants son: LEFT, CENTER, RIGHT y

en la posición vertical son TOP, CENTER, BOTTOM

Page 32: Clase swingparte1

Otra formaetiqueta3 = new JLabel();

etiqueta3.setText( "Etiqueta con icono y texto en parte inferior" );

etiqueta3.setIcon( imagen );

etiqueta3.setVerticalTextPosition( SwingConstants.BOTTOM );

etiqueta3.setToolTipText( "Esta es la etiqueta3" );

contenedor.add( etiqueta3 );

Swing

PruebaEtiqueta

Page 33: Clase swingparte1

Métodos setFont y setForegroundetiqueta3 = new JLabel();

etiqueta3.setText( "Etiqueta con icono y texto en parte inferior" );

etiqueta3.setIcon( imagen );

etiqueta3.setFont(new Font("Arial", Font.BOLD, 14));

etiqueta3.setForeground(Color.black);

Swing

Se puede cambiar el tipo de fuente, tamaño y color

Page 34: Clase swingparte1

JTextField y JPasswordField (Campos de texto)

•Los JTextField son áreas de una sola línea en las que el usuario puede introducir texto mediante el teclado o bien, el programa puede mostrar un resultado

Swing

Campo de texto en el que el programa

muestra un resultado

Campo de texto en el que el

usuario ingresadatos

Page 35: Clase swingparte1

JTextField y JPasswordField (Campos de texto)

•Los JPasswordField son áreas en los que el texto se representa con simbolos * para ocultarlo de otros usuarios

Swing

JTextField

JPasswordField

Page 36: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto1;

•Crear el campo

Se tienen varias formas

campoTexto1=new JTextField(10);

contenedor.add(campoTexto1);

Swing

Page 37: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto1;

•Crear el campo

Se tienen varias formas

campoTexto1=new JTextField(10);

contenedor.add(campoTexto1);

Swing

Crea un campo de texto con 10 columnas

Page 38: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto2;

•Crear el campo

Se tienen varias formas

campoTexto2=new JTextField(“Escriba el texto aquí”);

contenedor.add(campoTexto2);

Swing

Page 39: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto2;

•Crear el campo

Se tienen varias formas

campoTexto2=new JTextField(“Escriba el texto aquí”);

contenedor.add(campoTexto2);

Swing

Crea un campo de texto con texto

predeterminado. El tamaño del campo estará dado por la

longitud del mensaje

Page 40: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto2;

•Crear el campo

Se tienen varias formas

campoTexto2=new JTextField(“Escriba el texto aquí”,20);

contenedor.add(campoTexto2);

Swing

Cuando se crea un campo de texto con texto predeterminado, el tamaño del

campo queda determinado por la longitud del mensaje, si se quiere establecer un valor diferente se puede utilizar este

constructor

Page 41: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto3;

•Crear el campo

Se tienen varias formas

campoTexto3=new JTextField(“Campo de texto no editable”,20);

campoTexto3.setEditable(false);

contenedor.add(campoTexto3);

Swing

Page 42: Clase swingparte1

JTextField (Campo de texto)

•Declarar el campo

private JTextField campoTexto3;

•Crear el campo

Se tienen varias formas

campoTexto3=new JTextField(“Campo de texto no editable”,20);

campoTexto3.setEditable(false);

contenedor.add(campoTexto3);

Swing

Crea un campo de texto no editable, es decir, no se puede cambiar su contenido hasta que

se ejecute el comando

campoTexto3.setEditable(true);

Page 43: Clase swingparte1

JPasswordField

•Declarar el campo

private JPasswordField campoContraseña;

•Crear el campo

Se tienen los mismos constructores que para JTextField

campoContraseña=new JPasswordField(6);

contenedor.add(campoContraseña);

Swing

Crea un campo para contraseña

Page 44: Clase swingparte1

Eventos y metáfora del oyente

Java utiliza la metáfora del oyente para indicar que cualquier GUI está escuchando continuamente que suceda un evento

Los eventos que pueden ocurrir en una GUI son:

•Hacer clic sobre un botón

•Completar un campo de texto y hacer clic

•Hacer clic sobre una opción de un menú

•Ejecutar un comando con teclado

Swing

Page 45: Clase swingparte1

Eventos y metáfora del oyente

Los oyentes se han clasificado de acuerdo al componente que genera los eventos y se tienen interfaces que ayudan a manejar tales eventos

ActionListener

MouseListener

ItemListener

KeyListener

Swing

Page 46: Clase swingparte1

Swing

Tipo de evento Interfaz

ActionEvent ActionListener

MouseEvent MouseListener, MouseMotionListener

KeyEvent KeyListener

ItemEvent ItemListener

Page 47: Clase swingparte1

Eventos y metáfora del oyente

Cada componente que pueda generar un evento, debe tener un manejador que indique las acciones que deben ocurrir si se genera un evento

Swing

Page 48: Clase swingparte1

JTextField y JPasswordField (Campos de texto)

•Los campos de texto, a diferencia de las etiquetas, generan eventos!!!

•Cuando se escribe en el campo de texto y se da Enter, se genera un evento

•Concepto de FOCO: es el componente de la GUI que está actualmente siendo utilizado, cuando un campo de texto genera un evento, se dice que tiene el foco

Swing

Page 49: Clase swingparte1

Recuerde los oyentes (interfaces)

ActionListener

MouseListener

ItemListener

KeyListener

Entre estos, un campo de texto genera un evento de acción (ActionEvent)

Utilizar un objeto manejador de una clase que implemente la interfaz ActionListener!!!

Swing

Page 50: Clase swingparte1

Algunos métodos de las clases JTextField y JPasswordField

Swing

Método Descripción

setText(mensaje) Permite colocar un mensaje de tipo String en el campo

getText() Permite obtener el valor escrito en el campo

addActionListener(manejador) Adicionar el manejador de eventos al campo. El manejador es un objeto de una clase que implemente la interfaz ActionListener

Page 51: Clase swingparte1

Para que una aplicación pueda capturar los eventos que allí se generen debe:

-Crear la clase que implemente la interfaz

-Crear un objeto de esa clase (manejador)

-Registrar el manejador en cada componente que pueda generar un evento del tipo considerado en la interfaz

Swing

Page 52: Clase swingparte1

private class ManejadorCampoTexto implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

if ( evento.getSource() == campoTexto1 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto1

}

} // fin del método actionPerformed

} // fin de la clase interna privada ManejadorCampoTexto

Page 53: Clase swingparte1

private class ManejadorCampoTexto implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

if ( evento.getSource() == campoTexto1 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto1

}

} // fin del método actionPerformed

} // fin de la clase interna privada ManejadorCampoTexto

La clase ManejadorCampoTexto

implementa ActionListener

Page 54: Clase swingparte1

private class ManejadorCampoTexto implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

if ( evento.getSource() == campoTexto1 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto1

}

} // fin del método actionPerformed

} // fin de la clase interna privada ManejadorCampoTexto

Método que maneja un evento ActionEvent

Page 55: Clase swingparte1

private class ManejadorCampoTexto implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

if ( evento.getSource() == campoTexto1 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto1

}

} // fin del método actionPerformed

} // fin de la clase interna privada ManejadorCampoTexto

Si la fuente del evento es el campoTexto1

Page 56: Clase swingparte1

private class ManejadorCampoTexto implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

if ( evento.getSource() == campoTexto1 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto1

}

if ( evento.getSource() == campoTexto2 )

{

//Instrucciones que se deben ejecutar si la fuente del evento fue el campoTexto2

}

} // fin del método actionPerformed

} // fin de la clase interna privada ManejadorCampoTexto

Page 57: Clase swingparte1

Para que una aplicación pueda capturar los eventos que allí se generen debe:

• Crear la clase que implemente la interfaz

Se puede colocar en el mismo archivo de la GUI

• Crear un objeto de esa clase (manejador)

ManejadorCampoTexto manejador = new ManejadorCampoTexto();

• Registrar el manejador en cada componente que pueda generar un evento del tipo considerado en la interfaz

campoTexto1.addActionListener( manejador );

campoTexto2.addActionListener( manejador );

campoTexto3.addActionListener( manejador );

campoContraseña.addActionListener( manejador );

Swing

Page 58: Clase swingparte1

Para que una aplicación pueda capturar los eventos que alli se generen debe:

• Crear la clase que implemente la interfaz

Se puede colocar en el mismo archivo de la GUI

• Crear un objeto de esa clase (manejador)

ManejadorCampoTexto manejador = new ManejadorCampoTexto();

• Registrar el manejador en cada componente que pueda generar un evento del tipo considerado en la interfaz

campoTexto1.addActionListener( manejador );

campoTexto2.addActionListener( manejador );

campoTexto3.addActionListener( manejador );

campoContraseña.addActionListener( manejador );

Swing

PruebaCampoTexto

Page 59: Clase swingparte1

Problema: Desarrolle un traductor EspañolInglés con dos campos de texto, de tal forma que cuando se escriba un palabra en uno de los campos y se de enter, aparezca la traducción en el otro campo de texto. Se deben considerar 5 palabras.

Swing

Page 60: Clase swingparte1

Problema: Desarrolle una GUI con una etiqueta y un campo de texto. El contenido inicial de la etiqueta es el número 0. Cada vez que se de enter en el campo, se mostrará en la etiqueta la cantidad de veces que esto ha ocurrido. Utilice tamaño 40 para el texto en la etiqueta.

Swing

Page 61: Clase swingparte1

Problema: Desarrolle una GUI con una etiqueta y un campo de texto. El contenido inicial de la etiqueta es el número 0. Cada vez que se de enter en el campo, se mostrará en la etiqueta la cantidad de veces que esto ha ocurrido. Utilice tamaño 40 para el texto en la etiqueta.

String.valueOf( int var ) : convierte un entero a String

Swing

Page 62: Clase swingparte1

JButton (Botón)

•Es un componente en el que el usuario hace clic para desencadenar cierta acción

• Un programa puede utilizar varios tipos de botones

-Botones de comando

-Casillas de verificación

-Botones interruptores

-Botones de opción

Swing

Page 63: Clase swingparte1

Swing

Page 64: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

botonSimple=new JButton(“Botón simple”);

contenedor.add(botonSimple);

Swing

Page 65: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

botonSimple=new JButton(“Botón simple”);

contenedor.add(botonSimple);

Botón que solo tiene texto

Swing

Page 66: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

Icon image1 = new ImageIcon( "image6.gif" );

Icon image2 = new ImageIcon( "image7.gif" );

botonElegante = new JButton( "Botón elegante", image1 );

botonElegante.setRolloverIcon( image2 );

botonElegante.setToolTipText( "Muestra un mensaje" );

botonElegante.setMnemonic('M');

contenedor.add( botonElegante );

Swing

Page 67: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

Icon image1 = new ImageIcon( "image6.gif" );

Icon image2 = new ImageIcon( "image7.gif" );

botonElegante = new JButton( "Botón elegante", image1 );

botonElegante.setRolloverIcon( image2 );

botonElegante.setToolTipText( "Muestra un mensaje" );

botonElegante.setMnemonic('M');

contenedor.add( botonElegante ); Imagen inicial del botón

Swing

Page 68: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

Icon image1 = new ImageIcon( "image6.gif" );

Icon image2 = new ImageIcon( "image7.gif" );

botonElegante = new JButton( "Botón elegante", image1 );

botonElegante.setRolloverIcon( image2 );

botonElegante.setToolTipText( "Muestra un mensaje" );

botonElegante.setMnemonic('M');

contenedor.add( botonElegante );

Imagen cuando se pase el mouse por encima del

botón

Swing

Page 69: Clase swingparte1

JButton (Botón)

•Declarar el botón

private JButton botonSimple;

•Crear el campo

Se tienen varias formas

Icon image1 = new ImageIcon( "image6.gif" );

Icon image2 = new ImageIcon( "image7.gif" );

botonElegante = new JButton( "Botón elegante", image1 );

botonElegante.setRolloverIcon( image2 );

botonElegante.setToolTipText( "Muestra un mensaje" );

botonElegante.setMnemonic('M');

contenedor.add( botonElegante );

Un nemómico es un atajo con teclado

Swing

Page 70: Clase swingparte1

Se tienen varias formas

Icon image1 = new ImageIcon( "image6.gif" );

Icon image2 = new ImageIcon( "image7.gif" );

botonElegante = new JButton( "Botón elegante", image1 );

botonElegante.setRolloverIcon( image2 );

botonElegante.setToolTipText( "Muestra un mensaje" );

botonElegante.setMnemonic('M');

contenedor.add( botonElegante );

Botón inicial Botón cuando se pasa el mouse por encima

Swing

Page 71: Clase swingparte1

JButton (Botón)

•Un botón (de comando) genera un evento ActionEvent cuando el usuario hace clic en él

Utilizar un objeto manejador de una clase que implemente la interfaz ActionListener!!!

Swing

Page 72: Clase swingparte1

private class ManejadorBoton implements ActionListener {

// manejar evento de botón

public void actionPerformed( ActionEvent evento )

{

if (evento.getSource()==botonSimple)

JOptionPane.showMessageDialog( null, "Usted oprimió el boton simple");

if (evento.getSource()==botonElegante)

JOptionPane.showMessageDialog( null, "Usted oprimió el boton elegante");

}

} // fin de la clase interna privada ManejadorBoton

Page 73: Clase swingparte1

private class ManejadorBoton implements ActionListener {

// manejar evento de botón

public void actionPerformed( ActionEvent evento )

{

if (evento.getSource()==botonSimple)

JOptionPane.showMessageDialog( null, "Usted oprimió el boton simple");

if (evento.getSource()==botonElegante)

JOptionPane.showMessageDialog( null, "Usted oprimió el boton elegante");

}

} // fin de la clase interna privada ManejadorBoton

PruebaBoton

Page 74: Clase swingparte1

Problema: Modifique la GUI anterior de tal manera que se indique la cantidad de veces que se ha oprimido cada botón

Swing

Page 75: Clase swingparte1

JButton (Botón)

•Método setEnabled()

Permite habilitar o deshabilitar un botón

nombreBoton.setEnabled(false);

Swing

Deshabilita el botón, no ejecuta el oyente

Page 76: Clase swingparte1

JButton (Botón)

•Método setEnabled()

Permite habilitar o deshabilitar un botón

nombreBoton.setEnabled(false);

Swing

Deshabilita el botón, no ejecuta el oyente

PruebaBoton2

Page 77: Clase swingparte1

Problema: Desarrolle una GUI que tenga dos botones. Inicialmente uno de los dos está deshabilitado pero se puede habilitar si se hace clic en el segundo botón. Si esto ocurre, el botón dos se deshabilita y solo se podrá habilitar si se hace clic en el botón uno.

Swing

Page 78: Clase swingparte1

Problema: Desarrolle el traductor con botones. Un botón para traducir a inglés y otro para alemán

Swing

Page 79: Clase swingparte1

JCheckBox (Casilla de verificación)

Swing

En un checkbox, se tienen varias casillas, se pueden

marcar todas

Page 80: Clase swingparte1

JCheckBox (Casilla de verificacion)

•Un ChekBox genera un evento ItemEvent cuando el usuario hace clic en él

Utilizar un objeto manejador de una clase que implemente la interfaz ItemListener!!!

Swing

Page 81: Clase swingparte1

JChekbox (Casilla de verificación)

•Declarar

private JChekBox negrita, cursiva;

•Crear

negrita = new JCheckBox( "Negrita" );

contenedor.add( negrita );

cursiva = new JCheckBox( "Cursiva" );

contenedor.add( cursiva );

Swing

Page 82: Clase swingparte1

JChekbox (Casilla de verificacion)

•Declarar

private JChekBox negrita, cursiva;

•Crear

negrita = new JCheckBox( "Negrita" );

contenedor.add( negrita );

cursiva = new JCheckBox( "Cursiva" );

contenedor.add( cursiva );

ManejadorCasillaVerificacion manejador = new ManejadorCasillaVerificacion();

negrita.addItemListener( manejador );

cursiva.addItemListener( manejador );

Swing

Se adiciona el manejador, un objeto de una clase que implementa la interfaz ItemListener, por medio del

método addItemListener

Page 83: Clase swingparte1

private class ManejadorCasillaVerificacion implements ItemListener {

private int valNegrita = Font.PLAIN;

private int valCursiva = Font.PLAIN;

// responder a eventos de casilla de verificación

public void itemStateChanged( ItemEvent evento )

{

// procesar eventos de casilla de verificación negrita

if ( evento.getSource() == negrita )

valNegrita = negrita.isSelected() ? Font.BOLD : Font.PLAIN;

// procesar eventos de casilla de verificación cursiva

if ( evento.getSource() == cursiva )

valCursiva = cursiva.isSelected() ? Font.ITALIC : Font.PLAIN;

// establecer tipo de letra del campo de texto

campo.setFont( new Font( "Serif", valNegrita + valCursiva, 14 ) );

} // fin del método itemStateChanged

} // fin de la clase interna privada ManejadorCasillaVerificacion

Page 84: Clase swingparte1

private class ManejadorCasillaVerificacion implements ItemListener {

private int valNegrita = Font.PLAIN;

private int valCursiva = Font.PLAIN;

// responder a eventos de casilla de verificación

public void itemStateChanged( ItemEvent evento )

{

// procesar eventos de casilla de verificación negrita

if ( evento.getSource() == negrita )

valNegrita = negrita.isSelected() ? Font.BOLD : Font.PLAIN;

// procesar eventos de casilla de verificación cursiva

if ( evento.getSource() == cursiva )

valCursiva = cursiva.isSelected() ? Font.ITALIC : Font.PLAIN;

// establecer tipo de letra del campo de texto

campo.setFont( new Font( "Serif", valNegrita + valCursiva, 14 ) );

} // fin del método itemStateChanged

} // fin de la clase interna privada ManejadorCasillaVerificacion

Se implementa la interfaz ItemListener

Page 85: Clase swingparte1

private class ManejadorCasillaVerificacion implements ItemListener {

private int valNegrita = Font.PLAIN;

private int valCursiva = Font.PLAIN;

// responder a eventos de casilla de verificación

public void itemStateChanged( ItemEvent evento )

{

// procesar eventos de casilla de verificación negrita

if ( evento.getSource() == negrita )

valNegrita = negrita.isSelected() ? Font.BOLD : Font.PLAIN;

// procesar eventos de casilla de verificación cursiva

if ( evento.getSource() == cursiva )

valCursiva = cursiva.isSelected() ? Font.ITALIC : Font.PLAIN;

// establecer tipo de letra del campo de texto

campo.setFont( new Font( "Serif", valNegrita + valCursiva, 14 ) );

} // fin del método itemStateChanged

} // fin de la clase interna privada ManejadorCasillaVerificacion

El evento ItemEvent se maneja por medio del

método itemStateChanged

Page 86: Clase swingparte1

private class ManejadorCasillaVerificacion implements ItemListener {

private int valNegrita = Font.PLAIN;

private int valCursiva = Font.PLAIN;

// responder a eventos de casilla de verificación

public void itemStateChanged( ItemEvent evento )

{

// procesar eventos de casilla de verificación negrita

if ( evento.getSource() == negrita )

valNegrita = negrita.isSelected() ? Font.BOLD : Font.PLAIN;

// procesar eventos de casilla de verificación cursiva

if ( evento.getSource() == cursiva )

valCursiva = cursiva.isSelected() ? Font.ITALIC : Font.PLAIN;

// establecer tipo de letra del campo de texto

campo.setFont( new Font( "Serif", valNegrita + valCursiva, 14 ) );

} // fin del método itemStateChanged

} // fin de la clase interna privada ManejadorCasillaVerificacion

PruebaCasillaVerificacion

Page 87: Clase swingparte1

JRadioButton (Botones de opción)

Swing

En un RadioButton, solo una de las opciones se puede seleccionar al

tiempo

Page 88: Clase swingparte1

JRadioButton (Botones de opción)

•Un RadioButton genera un evento ItemEvent cuando el usuario hace clic en él

Utilizar un objeto manejador de una clase que implemente la interfaz ItemListener!!!

Swing

Page 89: Clase swingparte1

JRadioButton (Botones de opción)

•Declarar

private JRadioButton botonSimple, botonNegrita…

private ButtonGruop grupoBotonesOpcion;

Swing

Como existe una relación entre los botones (no se puede seleccionar más de un botón al tiempo), se

debe agrupar en un componente ButtonGroup

Después de crear cada RadioButton, se deben adicionar a un único ButtonGroup

Page 90: Clase swingparte1

JRadioButton (Botones de opción)

•Crear botonSimple = new JRadioButton( "Simple", true );

contenedor.add( botonSimple );

botonNegrita = new JRadioButton( "Negrita", false );

contenedor.add( botonNegrita );

botonCursiva = new JRadioButton( "Cursiva", false );

contenedor.add( botonCursiva );

botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );

contenedor.add( botonNegritaCursiva );

Swing

Page 91: Clase swingparte1

JRadioButton (Botones de opción)

•Crear botonSimple = new JRadioButton( "Simple", true );

contenedor.add( botonSimple );

botonNegrita = new JRadioButton( "Negrita", false );

contenedor.add( botonNegrita );

botonCursiva = new JRadioButton( "Cursiva", false );

contenedor.add( botonCursiva );

botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );

contenedor.add( botonNegritaCursiva );

Swing

Se puede indicar cuál de las opciones estará activa en el

momento de iniciar la aplicación

Page 92: Clase swingparte1

JRadioButton (Botones de opción)

•Crear botonSimple = new JRadioButton( "Simple", true );

contenedor.add( botonSimple );

botonNegrita = new JRadioButton( "Negrita", false );

contenedor.add( botonNegrita );

botonCursiva = new JRadioButton( "Cursiva", false );

contenedor.add( botonCursiva );

botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );

contenedor.add( botonNegritaCursiva );

ManejadorBotonOpcion manejador = new ManejadorBotonOpcion();

botonSimple.addItemListener(manejador);

botonNegrita.addItemListener(manejador);

botonCursiva.addItemListener(manejador);

botonNegritaCursiva.addItemListener(manejador);

Swing

Se adiciona el oyente a cada RadioButton

Page 93: Clase swingparte1

botonSimple = new JRadioButton( "Simple", true );

contenedor.add( botonSimple );

botonNegrita = new JRadioButton( "Negrita", false );

contenedor.add( botonNegrita );

botonCursiva = new JRadioButton( "Cursiva", false );

contenedor.add( botonCursiva );

botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );

contenedor.add( botonNegritaCursiva );

ManejadorBotonOpcion manejador = new ManejadorBotonOpcion();

botonSimple.addItemListener(manejador);

botonNegrita.addItemListener(manejador);

botonCursiva.addItemListener(manejador);

botonNegritaCursiva.addItemListener(manejador);

grupoBotonesOpcion = new ButtonGroup();

grupoBotonesOpcion.add( botonSimple );

grupoBotonesOpcion.add( botonNegrita );

grupoBotonesOpcion.add( botonCursiva );

grupoBotonesOpcion.add( botonNegritaCursiva );

Se crea el ButtonGroup y se le adicionan los RadioButton

Page 94: Clase swingparte1

botonSimple = new JRadioButton( "Simple", true );

contenedor.add( botonSimple );

botonNegrita = new JRadioButton( "Negrita", false );

contenedor.add( botonNegrita );

botonCursiva = new JRadioButton( "Cursiva", false );

contenedor.add( botonCursiva );

botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );

contenedor.add( botonNegritaCursiva );

ManejadorBotonOpcion manejador = new ManejadorBotonOpcion();

botonSimple.addItemListener(manejador);

botonNegrita.addItemListener(manejador);

botonCursiva.addItemListener(manejador);

botonNegritaCursiva.addItemListener(manejador);

grupoBotonesOpcion = new ButtonGroup();

grupoBotonesOpcion.add( botonSimple );

grupoBotonesOpcion.add( botonNegrita );

grupoBotonesOpcion.add( botonCursiva );

grupoBotonesOpcion.add( botonNegritaCursiva );

PruebaBotonOpcion

Ver Oyente

Page 95: Clase swingparte1

JComboBox (Cuadro combinado)

•Un ComboBox, conocido como lista desplegable proporciona una lista de elementos de la cual el usuario puede seleccionar solamente uno

•Los objetos ComboBox generan eventos ItemEvent cuando el usuario hace clic en una de las opciones de la lista

Utilizar un objeto manejador de una clase que implemente la interfaz ItemListener!!!

Swing

Page 96: Clase swingparte1

JComboBox (Cuadro combinado)

•Declarar

private JComboBox cuadroCombImagenes;

private String nombres[] = { "image3.gif", "image10.gif",

"image5.gif", "image8.gif" };

Swing

Page 97: Clase swingparte1

JComboBox (Cuadro combinado)

•Declarar

private JComboBox cuadroCombImagenes;

private String nombres[] = { "image3.gif", "image10.gif",

"image5.gif", "image8.gif" };

Swing

Se debe crear una arreglo con los datos que

aparecerán en la lista

Page 98: Clase swingparte1

JComboBox (Cuadro combinado)

•Crear

cuadroCombImagenes = new JComboBox( nombres );

cuadroCombImagenes.setMaximumRowCount(4);

Swing

Se pasa al constructor el arreglo con los datos que

aparecerán en la lista

Page 99: Clase swingparte1

JComboBox (Cuadro combinado)

•Crear

cuadroCombImagenes = new JComboBox( nombres );

cuadroCombImagenes.setMaximumRowCount(4);

Swing

Se establece la cantidad máxima de ítems que puede tener la lista sin necesitar la barra de desplazamiento

Page 100: Clase swingparte1

JComboBox (Cuadro combinado)

•Crear

cuadroCombImagenes = new JComboBox( nombres );

cuadroCombImagenes.setMaximumRowCount(2);

Swing

Aparece la barra si se coloca el valor en 2 y hay 4

elementos en la lista

Page 101: Clase swingparte1

private class ManejadorCombo implements ItemListener {

public void itemStateChanged( ItemEvent evento )

{

if ( evento.getStateChange() == ItemEvent.SELECTED ){

int index=cuadroCombImagenes.getSelectedIndex();

System.out.println("Seleccionó el item " + index + " en la lista");

etiqueta.setIcon( iconos[index ] );

}

}

}

Page 102: Clase swingparte1

private class ManejadorCombo implements ItemListener {

public void itemStateChanged( ItemEvent evento )

{

if ( evento.getStateChange() == ItemEvent.SELECTED ){

int index=cuadroCombImagenes.getSelectedIndex();

System.out.println("Seleccionó el item " + index + " en la lista");

etiqueta.setIcon( iconos[index ] );

}

}

} Método que permite conocer que un ítem cambio de estado

Page 103: Clase swingparte1

private class ManejadorCombo implements ItemListener {

public void itemStateChanged( ItemEvent evento )

{

if ( evento.getStateChange() == ItemEvent.SELECTED ){

int index=cuadroCombImagenes.getSelectedIndex();

System.out.println("Seleccionó el item " + index + " en la lista");

etiqueta.setIcon( iconos[index ] );

}

}

}

Método del ComboBox que permite saber cuál de los ítems fue seleccionado.

Retorna el índice (comenzando en 0)

Page 104: Clase swingparte1

private class ManejadorCombo implements ItemListener {

public void itemStateChanged( ItemEvent evento )

{

if ( evento.getStateChange() == ItemEvent.SELECTED ){

int index=cuadroCombImagenes.getSelectedIndex();

System.out.println("Seleccionó el item " + index + " en la lista");

etiqueta.setIcon( iconos[index ] );

}

}

}

PruebaCuadroComb

Page 105: Clase swingparte1

JList (listas de selección)

•Una lista de selección permite al usuario seleccionar uno (Listas de selección simple) o varios elementos de una lista (Listas de selección múltiple)

•Las listas de selección se combinan con la clase JScrollPane

Swing

JList

JScrollPane

Page 106: Clase swingparte1

•Una lista de selección genera eventos ListSelectionEvent cuando el usuario hace clic en una de las opciones de la lista

Utilizar un objeto manejador de una clase que implemente la interfaz ListSelectionListener!!!

Para adicionar este escucha se debe utilizar el método addListSelectionListener

Swing

Page 107: Clase swingparte1

JList (listas de selección)

•Declarar

private JList listaColores;

private JScrollPane scroll;

private final String nombresColores[] = { "Negro", "Azul", "Cyan", "Gris oscuro“,

"Gris", "Verde", "Gris claro", "Magenta", "Naranja", "Rosa", "Rojo", "Blanco", "Amarillo" };

Swing

Se debe crear un arreglo con los datos que

aparecerán en la lista

Page 108: Clase swingparte1

JList (listas de selección)

•Crear

listaColores = new JList( nombresColores );

listaColores.setVisibleRowCount( 5 );

listaColores.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

scroll = new JScrollPane(listaColores);

contenedor.add(scroll);

Swing

Page 109: Clase swingparte1

JList (listas de selección)

•Crear

listaColores = new JList( nombresColores );

listaColores.setVisibleRowCount( 5 );

listaColores.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

scroll = new JScrollPane(listaColores);

contenedor.add(scroll);

Swing

Se pasa al constructor la lista con los nombres

Se especifica que es una lista de selección simpleSe adiciona la lista

a un scroll

Page 110: Clase swingparte1

JList (listas de selección)

•Crear

listaColores = new JList( nombresColores );

listaColores.setVisibleRowCount( 5 );

listaColores.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

scroll = new JScrollPane(listaColores);

contenedor.add(scroll);

ManejadorLista manejador = new ManejadorLista();

listaColores.addListSelectionListener(manejador);

Swing

Page 111: Clase swingparte1

private class ManejadorLista implements ListSelectionListener {

public void valueChanged( ListSelectionEvent evento )

{

int index=listaColores.getSelectedIndex();

contenedor.setBackground(colores[index] );

}

}

Se implementa el método valueChange de la interfaz ListSelectionListener

Page 112: Clase swingparte1

private class ManejadorLista implements ListSelectionListener {

public void valueChanged( ListSelectionEvent evento )

{

int index=listaColores.getSelectedIndex();

contenedor.setBackground(colores[index] );

}

}

PruebaLista

Page 113: Clase swingparte1

JList (listas de selección)

Swing

JList de selección múltiple

JList de selección

simple

Page 114: Clase swingparte1

JList (listas de selección)

•Crear

listaColores = new JList( nombresColores );

listaColores.setVisibleRowCount( 5 );

listaColores.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

scroll1 = new JScrollPane(listaColores);

contenedor.add(scroll1);

Swing

Se especifica que se permite

selección múltiple

Page 115: Clase swingparte1

public class ManejadorMultiple implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

listaCopia.setListData( listaColores.getSelectedValues() );

}

}

Se captura el evento por medio del botón

Retorna los valores de listaColores seleccionados

Establecer los datos que aparecerán en la lista

Page 116: Clase swingparte1

public class ManejadorMultiple implements ActionListener

{

public void actionPerformed( ActionEvent evento )

{

listaCopia.setListData( listaColores.getSelectedValues() );

}

}

PruebaSeleccionMultiple

Explicar ancho y alto de la lista que no tiene elementos