2013 - I Interfaces Grficas Una interfaz es un medio que permite que dos entidades se comuniquen. En una interfaz de usuario una de las entidades es una persona y la otra un sistema que el usuario intenta controlar. El sistema puede ser una herramienta, un automvil o cualquier dispositivo electrnico, en particular una computadora. En una computadora el usuario ejecuta acciones como oprimir teclas o el botn del mouse y estas acciones son percibidas por la interfaz del sistema.
Interfaces Grficas Antes de los 90 se utilizaban interfaces de lneas de comandos. El usuario ingresaba comandos con una sintaxis muy rigurosa usando el teclado.
Interfaces Grficas Las interfaces grficas de usuario (GUI) explotan la capacidad de las computadoras para reproducir imgenes y grficos en pantalla y brindan un ambiente ms amigable, simple e intuitivo. interfaz: medio de comunicacin entre entidades. grfica: incluye ventanas, menes, botones, texto, imgenes. usuario: persona que usa la interfaz para controlar un sistema
interfaz (superficie de contacto) Conexin fsica y funcional entre dos aparatos o sistemas independientes. Interfaces Grficas Modelo Escritorio conos Ventanas Menes descolgables Texto e imgenes organizadas en redes Manipulacin arrastrar y soltar Interfaces Grficas conos Interfaces Grficas Una ventana es una porcin de la pantalla que sirve como una pantalla ms pequea Interfaces Grficas Ventanas Solapadas Interfaces Grficas Men Desplegable Interfaces Grficas Un men es una lista de opciones alternativas ofrecidas al usuario Interfaces Grficas Los 90 Interfaces Grficas Escritorio 2D Interfaces Grficas Escritorio 3D Interfaces Grficas Interfaces Grficas Una GUI es una coleccin de componentes con una representacin grfica y capacidad para percibir eventos generados por las acciones del usuario. Las componentes son las partes individuales a partir de las cuales se conforma una interfaz grfica. Por ejemplo, el botn para cerrar una ventana, la barra de desplazamiento de una ventana y la ventana misma.
Interfaces Grficas Un usuario realiza una accin que genera un evento ante el cual una componente tiene una reaccin. Una componente est asociada a un objeto grfico que puede interactuar con el usuario. Un objeto grfico es una instancia de una clase grfica. Algunos de los atributos de un objeto grfico son atributos grficos y parte del comportamiento ofrece servicios grficos.
Interfaces Grficas Algunos componentes son contenedores de otros componentes. Un contenedor tiene atributos especiales como por ejemplo el layout o diagramado de acuerdo al cual se organizan las componentes contenidas. Una ventana es un contenedor de alto nivel. Un frame es un tipo especial de ventana sobre el que puede ejecutarse una aplicacin.
Interfaces Grficas La construccin de una GUI requiere: disear la interfaz de acuerdo a las especificaciones implementar la interfaz usando las facilidades provistas por el lenguaje.
Interfaces Grficas Diseo de una GUI
El diseo de una interfaz grfica abarca tres aspectos: Definir las componentes Organizar las componentes estableciendo el layout o diagramado de las componentes contenedoras Decidir cmo reacciona cada componente ante las acciones realizadas por el usuario.
Interfaces Grficas Implementacin de una GUI
La implementacin de una interfaz grfica consiste en: crear un objeto grfico para cada componente de la GUI e insertarlo en otras componentes contenedoras. definir el comportamiento de las componentes reactivas en respuesta a las acciones del usuario.
El diseo es una etapa fundamental, pero nuestro objetivo en esta materia no va a ser disear interfaces grficas sino implementar el diseo de una GUI Interfaces Grficas en Java El mecanismo de manejo de eventos provisto por Java permite combinar las clases que modelan los aspectos especficos de un problema con las que soportan la implementacin de la interfaz grfica. La implementacin de una GUI en Java se realiza usando un paquete grfico. Un paquete grfico brinda clases generales a partir de las cuales es posible crear objetos grficos o bien definir nuevas clases ms especficas a partir de las cuales crear objetos.
Implementacin de una GUI
Interfaces Grficas en Java El desarrollo de software orientado a objetos enfatiza la importancia de separar los aspectos especficos del problema de aquellos que se relacionan con la presentacin de los datos. Si vamos a desarrollar un sistema para depositar y extraer efectivo en un cajero automtico, separaremos la clase que modela la cuenta bancaria de las que se ocupan de la interfaz grfica. Observemos que en lo que sigue integraremos la mayora de los conceptos presentados en esta materia: herencia, polimorfismo, ligadura dinmica y encapsulamiento. Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Se desea modelar una cuenta bancaria sobre la que se realizan depsitos, extracciones y consultas de saldo. La cuenta bancaria tiene asociado un cdigo y un saldo. El cdigo la identifica unvocamente y es fijo. El saldo aumenta cuando el titular de la cuenta efecta un depsito y disminuye cuando realiza una extraccin. El usuario est autorizado a girar en descubierto hasta un monto mximo establecido. Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
El usuario opera con su cuenta bancaria a travs de una aplicacin que se ejecuta sobre un frame como el que sigue: Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Si el usuario presiona el botn Depositar en pantalla aparece un cuadro de dilogo como el que sigue: Si el usuario presiona el botn OK aparece en pantalla un cuadro de dilogo Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Anlogamente si el usuario presiona el botn Extraer en pantalla aparece un cuadro de dilogo como el que sigue: Si el usuario presiona el botn OK aparece en pantalla un cuadro de dilogo Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Si el usuario presiona el botn Consultar Saldos en pantalla aparece O bien Cuenta_Bancaria <<atributos de la clase>> max_descubierto: real <<atributos de la instancia>> codigo : entero saldo : real <<constructor>> Cuenta_Bancaria ()
La ejecucin comienza con la creacin de una instancia de GUI_CtaBancaria Caso de Estudio: Cuenta Bancaria
Interfaces Grficas en Java Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Para implementar esta interfaz grfica vamos a definir una clase que extienda a la clase JFrame provista por el paquete grfico Swing. import java.awt.*; import java.awt.event.*; import javax.swing.border.*; import javax.swing.*; public class GUI_CtaBancaria extends JFrame {
public GUI_CtaBancaria() {
} } Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Cada botn de la interfaz estn asociado a un objeto grfico que tienen la facultad de reaccionar ante acciones producidas por el usuario.
} Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Se crea un objeto grfico asociado a la componente de la GUI.
botonDepositar = new JButton();
Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Se establece la apariencia de la componente de la GUI, envindole mensajes al objeto grfico asociado.
botonDepositar = new JButton(); botonDepositar.setText("Depositar"); botonDepositar.setPreferredSize (new Dimension(124, 50)); botonDepositar.setSize(150, 50); botonDepositar.setBorder (BorderFactory.createCompoundBorder (new LineBorder (new java.awt.Color(0, 0, 0), 1, false), null));
Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Para que el botn tenga la capacidad de percibir la accin del usuario, creamos un objeto oyente y lo registramos al objeto grfico.
botonDepositar = new JButton(); botonDepositar.setText("Depositar"); botonDepositar.setPreferredSize (new Dimension(124, 50)); botonDepositar.setSize(150, 50); botonDepositar.setBorder (BorderFactory.createCompoundBorder (new LineBorder (new java.awt.Color(0, 0, 0), 1, false), null)); OyenteDep oDep = new OyenteDep(); botonDep.addActionListener(oDep);
Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
Otra parte de la implementacin consiste en escribir el cdigo que especifica el comportamiento de cada objeto reactivo.
private class OyenteDep implements ActionListener { public void actionPerformed(ActionEvent event){ float dep; String deposito; JOptionPane dialogo = new JOptionPane(); deposito = dialogo.showInputDialog( "Ingrese la cantidad a depositar" ); if ((deposito != null) && (deposito.length() > 0)){ dep = Float.parseFloat(deposito); dialogo.showMessageDialog(null,"Usted deposit " + dep+ " pesos","Depsito", JOptionPane.PLAIN_MESSAGE ); cuenta.depositar(dep); } } Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
En la implementacin de esta interfaz grfica redefinimos en una clase interna el cdigo del mtodo actionPerformed() provisto por ActionListener. La clase que modela la interfaz usa los servicios provistos por la clase que modela la cuenta bancaria propiamente dicha.
Cuenta_Bancaria GUI_CtaBancaria Interfaces Grficas en Java Caso de Estudio: Cuenta Bancaria
import class TestCtaBancaria public static void main { (String[] args) { GUI_CtaBancaria unaCuenta ; unaCuenta = new GUI_CtaBancaria(); unaCuenta.setVisible(true); } } La aplicacin crea una instancia de la nueva clase. La ejecucin comienza creando una instancia de la clase GUI_CtaBancaria, esto es, creando un frame.
Interfaces Grficas en Java Un frame es un tipo particular de ventana sobre la que es posible ejecutar una aplicacin Podemos construir un frame creando un objeto de la clase JFrame o de una clase ms especfica que definimos a partir de JFrame
Interfaces Grficas en Java Un frame es un objeto contenedor Toda instancia de JFrame tiene atributos marco, lnea de ttulo, algunos botones y un panel de contenido
import javax.swing.*; class PrimerEjemplo {
public static void main(String args[ ]) {
JFrame f = new JFrame(Mi Aplicacin); f.setSize(400, 300); f.setVisible(true); } }
Interfaces Grficas en Java
Creamos directamente una instancia de JFrame
import javax.swing.*; class PrimerEjemplo {
public static void main(String args[ ]) {
JFrame f = new JFrame(); f.setTitle (Mi Aplicacin); f.setSize(400, 300); f.setVisible(true); } }
Interfaces Grficas en Java
En este caso usamos el constructor sin parmetros y establecemos el ttulo luego
La variable f mantiene una referencia a un objeto de clase JFrame y puede recibir cualquiera de los mensajes provistos por esa clase (o sus clases ancestro)
Interfaces Grficas en Java JFrame f = new JFrame(Mi Aplicacin); f.setSize(400, 300); f.setVisible(true);
setSize(400,300) (Dimension) establece el ancho y la altura de la ventana.
setVisible(true) (Component) el parmetro indica si la ventana se muestra o no.
Interfaces Grficas en Java
class MiVentana extends JFrame{ public MiVentana() { super(Segundo Ejemplo"); setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
Interfaces Grficas en Java import javax.swing.*; public class SegundoEjemplo { public static void main(String args[ ]) { MiVentana f= new MiVentana(); f.setVisible(true); } }
Una alternativa ms adecuada es definir una nueva clase que extiende a JFrame
La variable f mantiene una referencia a un objeto de clase MiVentana El objeto est caracterizado por los atributos y servicios de MiVentana, JFrame y de sus ancestros en la jerarqua Como los mensajes setSize y setDefaultCloseOperation son enviados desde el constructor de una ventana no es necesario indicar el objeto receptor. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) (JFrame) el parmetro indica qu hacer cuando la ventana se cierra, en este caso terminar la aplicacin.
Interfaces Grficas en Java
Un objeto de clase JFrame tiene varios atributos, entre ellos el panel de contenido. En lugar de acceder directamente al frame, vamos a trabajar sobre el panel de contenido. Por ejemplo cuando establecemos el color del fondo o insertamos componentes
getContentPane().setBackground(col);
getContentPane().add(etiqueta); Interfaces Grficas en Java
import java.awt.*; import javax.swing.*; class MiVentanaColor extends JFrame{ JLabel etiqueta; public MiVentanaColor (String titulo, Color col) { super(titulo); setSize(400, 300);
getContentPane().setBackground(col);
etiqueta = new JLabel("Panel de contenido"); getContentPane().add(etiqueta); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
Interfaces Grficas en Java Panel de contenido
Interfaces Grficas en Java import java.awt.*; class TercerEjemplo { public static void main(String args[ ]) { MiVentanaColor f1= new MiVentanaColor(Una ventana, Color.BLUE); f1.setVisible(true);
MiVentanaColor f2= new MiVentanaColor(Otra ventana, Color.RED); f2.setVisible(true); } }
import java.awt.*; import javax.swing.*; class MiVentanaColor extends JFrame{ JLabel etiqueta; public MiVentanaColor (String titulo, Color col) { super(titulo); setSize(400,300);
getContentPane().setBackground(col);
etiqueta = new JLabel("Panel de contenido"); getContentPane().add(etiqueta); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
Interfaces Grficas en Java Mensajes enviados al objeto de clase MiVentanaColor que se est construyendo
Interfaces Grficas en Java getContentPane().setBackground(col); getContentPane().add(etiqueta); getContentPane() mensaje enviado al objeto de clase MiVentanaColor para requerir el panel de contenido, retorna un objeto de clase Container
mensajes enviados al panel de contenido ( de clase Container) para establecer valores de atributos o agregar componentes
import java.awt.*; import javax.swing.*; public class MiVentanaColor extends JFrame{ JLabel etiqueta; Container panel; public MiVentanaColor(String titulo, Color col) { super(titulo); setSize(400, 300); etiqueta =new JLabel(Panel de contenido"); panel = getContentPane(); panel.setBackground(col); panel.add(etiqueta); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
Interfaces Grficas en Java
Interfaces Grficas en Java Cada componente de la interfaz, en este caso la etiqueta y el panel de contenido, queda asociada a un objeto con una representacin grfica. Los atributos de la clase mantienen justamente referencias a estos objetos. En este caso son objetos pasivos, no reaccionan ante las acciones del usuario. Las componentes activas en los ejemplos de la clase de hoy reaccionan con un comportamiento establecido por las clases provistas por Swing y AWT. Por ejemplo la barra de ttulo cuando arrastramos el mouse o los botones para minimizar, maximizar y cerrar.
import java.awt.*; import javax.swing.*; public class MiVentanaColor extends JFrame{ JLabel etiqueta; Container panel; public MiVentanaColor(String titulo, Color col) { super(titulo); initGUI (titulo,col); }
}
Interfaces Grficas en Java Adoptamos la convencin de que el constructor invoca al constructor de la clase base y luego invoca a un mtodo provisto por la misma clase que realiza el resto de la inicializacin.
void initGUI (String titulo, Color col){ etiqueta = new JLabel(Panel de contenido"); panel = getContentPane(); panel.setBackground(col); panel.add(etiqueta); setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); }
Interfaces Grficas en Java ste es el aspecto cuando se aprieta rojo o verde: Caso de Estudio: Fondo Rojo - Verde Desarrolle una aplicacin que permita establecer el color de fondo de una ventana. El color ser rojo o verde de acuerdo al botn que se apriete. La ventana inicialmente debe aparecer as: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GUIFondoRojoVerde extends JFrame{
private JButton botonRojo, botonVerde;
}
Caso de Estudio: Fondo Rojo - Verde botonRojo y botonVerde mantendrn referencias a objetos grficos import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GUIFondoRojoVerde extends JFrame{
private JButton botonRojo, botonVerde;
}
Caso de Estudio: Fondo Rojo - Verde Ambos objetos son adems objetos fuentes de evento, estn asociados a componentes reactivas de la GUI Caso de Estudio: Fondo Rojo - Verde import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GUIFondoRojoVerde extends JFrame{
private JButton botonRojo, botonVerde; public GUIFondoRojoVerde() {
hacerGUI();
}
}
private void hacerGUI (){ botonRojo = new JButton("Rojo");
} Caso de Estudio: Fondo Rojo - Verde Se crea un objeto fuente de evento de clase JButton El objeto fuente de evento debe quedar vinculado a un objeto oyente que acte de acuerdo al comportamiento esperado para el botn rojo.
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR();
} Caso de Estudio: Fondo Rojo - Verde Se crea un objeto oyente de clase OyenteBotonR En la clase OyenteBotonR definimos el comportamiento esperado para el botn Rojo
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
} Caso de Estudio: Fondo Rojo - Verde Se vinculan los dos objetos, esto es, se registra el objeto oyente al objeto fuente de evento.
La componente de la GUI asociada al objeto fuente de evento, el botn rojo en este caso, pasa a ser reactivo: percibe la accin del usuario y reacciona de acuerdo al comportamiento especificado en la clase OyenteBotonR
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
getContentPane().add(botonRojo);
} Caso de Estudio: Fondo Rojo - Verde Se agrega el botn en el contenedor Cuando se oprima el botn Rojo la reaccin depende del comportamiento que establece la clase OyenteBotonR
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
getContentPane().add(botonRojo);
botonVerde = new JButton("Verde"); OyenteBotonV ponerVerde = new OyenteBotonV(); botonVerde.addActionListener(ponerVerde);
getContentPane().add(botonVerde);
} Caso de Estudio: Fondo Rojo - Verde Caso de Estudio: Fondo Rojo - Verde Ambos botones son objetos fuente de evento y cada uno est ligado a un objeto oyente.
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
getContentPane().add(botonRojo);
botonVerde = new JButton("Verde"); OyenteBotonV ponerVerde = new OyenteBotonV(); botonVerde.addActionListener(ponerVerde);
getContentPane().add(botonVerde);
} class OyenteBotonR implements ActionListener { public void actionPerformed( ActionEvent event) { getContentPane().setBackground(Color.red);} } }
} Caso de Estudio: Fondo Rojo - Verde
private void hacerGUI (){ botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
} Caso de Estudio: Fondo Rojo - Verde El evento externo provocado por la accin del usuario al oprimir el botn Rojo, es detectado por el objeto fuente de evento.
El objeto fuente de evento detecta el evento externo y dispara un evento interno, esto es, se crea un objeto implcitamente de la clase ActionEvent.
La definicin de la clase OyenteBotonR incluye la redefinicin del mtodo actionPerformed que recibe como argumento el objeto evento creado implcitamente.
class OyenteBotonV implements ActionListener { public void actionPerformed( ActionEvent event) { getContentPane().setBackground(Color.green);} } } } Caso de Estudio: Fondo Rojo - Verde
private void hacerGUI (){
botonVerde = new JButton(Verde"); OyenteBotonV ponerVerde = new OyenteBotonV(); botonVerde.addActionListener(ponerVerde);
} public class GUIFondoRojoVerde extends JFrame{
class OyenteBotonR implements ActionListener {
public void actionPerformed( ActionEvent event) { getContentPane().setBackground(Color.red); } }
class OyenteBotonV implements ActionListener {
public void actionPerformed( ActionEvent event) { getContentPane().setBackground(Color.green);} } } Caso de Estudio: Fondo Rojo - Verde Cada oyente tiene su propio mtodo actionPerformed que establece el comportamiento de la componente reactiva de la interfaz. Cada clase interna tiene acceso al panel de contenido. Caso de Estudio: Fondo Rojo - Verde El programador redefine el mtodo actionPerformed que no va a ser invocado explcitamente por l mismo, sino que el mensaje que provoca su ejecucin est incluido en algn mtodo definido en una clase provista por Java. Esto es, el programador define (o redefine) un mtodo que l mismo NUNCA VA A INVOCAR al menos explcitamente! El mtodo recibe como argumento un objeto que tampoco ha sido creado explcitamente por el programador. Caso de Estudio: Fondo Rojo - Verde import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GUIFondoRojoVerde extends JFrame { private JButton botonRojo, botonVerde; public GUIFondoRojoVerde() { setLayout(new FlowLayout()); setSize(200, 120); setDefaultCloseOperation (EXIT_ON_CLOSE); hacerGUI(); } }
class Test{ public static void main(String[] args) {
GUIFondoRojoVerde cuadro = new GUIFondoRojoVerde(); cuadro.setVisible(true); } } Caso de Estudio: Fondo Rojo - Verde Caso de Estudio: Fondo Rojo - Verde Observemos que estamos considerando tres tipos de objetos:
Los objeto fuente del evento Los objetos evento Los objetos oyentes (listeners) Caso de Estudio: Fondo Rojo - Verde Los objetos fuente del evento, estn asociados a una componente de la interfaz, tienen una representacin grfica y son capaces de percibir y reaccionar ante un evento externo provocado por una accin del usuario y disparar eventos de software. Los objetos evento que son disparados implcitamente por un objeto fuente del evento. Los objetos oyentes (listeners) que se ejecutan para manejar un evento. La clase a la que pertenece un objeto oyente brinda mtodos para manejar eventos, es decir especifica el curso de accin a seguir en respuesta a diferentes tipos de eventos. Caso de Estudio: Fondo Rojo - Verde En la programacin basada en eventos el programador: crea objetos grficos, algunos de ellos son objetos fuente de evento, reaccionan ante un evento externo creando objetos evento crea objetos oyentes cuya funcin va a ser manejar los eventos que se producen implementa los mtodos manejadores de eventos que determinan el comportamiento de los objetos oyentes Los objetos que corresponden al evento interno no son creados explcitamente por el programador, no estn asociados a una variable. El flujo de ejecucin queda establecido fundamentalmente por el orden de los eventos.
Componente reactiva Evento El objeto fuente de evento dispara uno o ms eventos internos El objeto oyente recibe un mensaje con el objeto evento como parmetro y en respuesta a l ejecuta un mtodo definido por la clase a la que pertenece. El usuario realiza una accin que genera un evento externo sobre un objeto fuente de evento
Caso de Estudio: Fondo Rojo - Verde Cada evento interno est asociado a un objeto evento creado implcitamente Caso de Estudio: Fondo Rojo - Verde La clase a la que pertenece el objeto oyente implementa el mtodo actionPerformed(ActionEvent e) El mtodo recibe el evento interno como parmetro. El mtodo actionPerformed forma parte de la inteface ActionListener que es implementada por las clases OyenteBotonR y OyenteBotonV
Los objetos de las clases JButton, JTextField, JComboBox, JRadioButton, JCheckBox, JMenuItem reaccionan frente a un evento externo generando un objeto evento de la clase ActionEvent.
Cada clase puede generar objetos evento de una clase diferente. 76 Interfaces Grficas Las interfaces grficas de usuario (GUI) explotan la capacidad de las computadoras para reproducir imgenes y grficos en pantalla y brindan un ambiente ms amigable, simple e intuitivo. interfaz: medio de comunicacin entre entidades. grfica: incluye ventanas, menes, botones, texto, imgenes. usuario: persona que usa la interfaz para controlar un sistema
77 Interfaces Grficas Una GUI es una coleccin de componentes con una representacin grfica y capacidad para percibir eventos generados por las acciones del usuario. Las componentes son las partes individuales a partir de las cuales se conforma una interfaz grfica. Por ejemplo, el botn para cerrar una ventana, la barra de desplazamiento de una ventana y la ventana misma.
78 Interfaces Grficas Un usuario realiza una accin que genera un evento ante el cual una componente tiene una reaccin. Una componente est asociada a un objeto grfico que puede interactuar con el usuario. Un objeto grfico es una instancia de una clase grfica. Algunos de los atributos de un objeto grfico son atributos grficos y parte del comportamiento ofrece servicios grficos.
79 Interfaces Grficas en Java Una de las razones por las cuales Java ha llegado a ser tan popular es que brinda herramientas adecuadas para facilitar la construccin de interfaces grficas de usuario (GUI). Un paquete grfico ofrece una coleccin de clases que pueden ser usadas para: crear objetos grficos asociados a las componentes de la interfaz definir clases ms especficas a partir de las cuales se crearn componentes.
80 Interfaces Grficas en Java Algunos componentes son contenedores de otros componentes. Una ventana es un contenedor de alto nivel. Un frame es un tipo especial de ventana sobre el que puede ejecutarse una aplicacin.
Un objeto grfico de clase JFrame tiene atributos marco, panel de contenido y tres botones. La clase JFrame est provista en el paquete Swing y especializa a las clases Frame y Window provistas en el paquete AWT.
81 Interfaces Grficas en Java Java ofrece diferentes paquetes grficos para soportar la implementacin de grficos y GUIs. AWT(Abstract Window Toolkit) y Swing son paquetes grficos independientes de la plataforma, para desarrollar interfaces grficas. Ambos brindan una coleccin de clases que pueden especializarse para crear botones, cajas de texto, menes, etc. Una de las ventajas de Swing sobre AWT es que permite desarrollar aplicaciones con una apariencia similar a la de la plataforma subyacente con muy poco esfuerzo. Swing no reemplaza a AWT sino que la usa y agrega nuevas clases. 82 Interfaces Grficas en Java Cada clase de Swing modela un tipo de componente.
Los tipos de componentes pueden agruparse en:
controles bsicos displays interactivos con informacin altamente formateada displays con informacin no editable contenedores
El paquete Swing
83 Interfaces Grficas en Java El paquete Swing: Controles Bsicos Son componentes simples que se usan principalmente para tomar la entrada del usuario y mostrar un estado simple.
JButton JCheckBox JComboBox JList JMenu JRadioButton JSlider 84 Interfaces Grficas en Java El paquete Swing: Displays interactivos con informacin altamente formateada
JColorChooser JEditorPane JTextPane 85 Interfaces Grficas en Java El paquete Swing: Displays con informacin no editable
JLabel JProgressBar JSeparator JToolTip 86 Interfaces Grficas en Java El paquete Swing: Contenedores
JApplet JFrame JDialog En toda interfaz hay al menos un componente contenedor
87
JPanel JSplitPane JTabbedPane JToolBar JScrollPane Interfaces Grficas en Java El paquete Swing: Contenedores
88
JInternalFrame JLayeredPane JRootPane Interfaces Grficas en Java El paquete Swing: Contenedores
89 Interfaces Grficas en Java La jerarqua de clases del paquete Swing En esta jerarqua la relacin entre una clase derivada y una clase base no siempre es de tipo isa. 90 Interfaces Grficas en Java La jerarqua de clases del paquete Swing javax.swing Class JFrame java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame La clase Frame agrega a la clase Window el marco, la lnea de ttulo y los botones La clase JFrame agrega a Frame el panel de contenido 91 Caso de Estudio: Contador Desarrolle una aplicacin que permita establecer incrementar o decrementar un contador de acuerdo al botn que oprima el usuario. La ventana inicialmente debe aparecer as: El valor va a ir cambiando a medida que se oprimen los botones. 92 class Test{ public static void main(String[] args) {
Contador cuadro = new Contador(); cuadro.setVisible(true); } } Caso de Estudio: Contador 93 import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class Contador extends JFrame {
private int numero; private JLabel numeroEtiqueta; private JButton botonIncrementar,botonDecrementar;
public Contador() { numero = 0; setLayout(new FlowLayout()); setSize(200, 120); setDefaultCloseOperation(EXIT_ON_CLOSE); hacerGUI(); } }
Caso de Estudio: Contador 94
private void hacerGUI(){ numeroEtiqueta = new JLabel("" + numero); //Crea el boton incrementar, el oyente y lo registra botonIncrementar = new JButton("Incrementar"); OyenteBotonI incrementar = new OyenteBotonI(); botonIncrementar.addActionListener(incrementar); //Crea el boton decrementar, el oyente y lo registra botonDecrementar = new JButton("Decrementar"); OyenteBotonD decrementar = new OyenteBotonD(); botonDecrementar.addActionListener(decrementar); //inserta las componentes en el panel del frame getContentPane().add(numeroEtiqueta); getContentPane().add(botonIncrementar); getContentPane().add(botonDecrementar); }
}
Caso de Estudio: Contador 95 Caso de Estudio: Contador Diferentes clases de componentes requieren diferentes clases de oyentes para manejar los eventos internos que los objetos disparan.
Un botn dispara eventos llamados eventos de accin que son manejados por oyentes de accin.
Es decir un objeto de clase JButton genera un objeto de la clase ActionEvent que es enviado como parmetro a un objeto de una clase que implementa a la interface ActionListener. 96
public class Contador extends JFrame {
private class OyenteBotonI implements ActionListener { public void actionPerformed(ActionEvent event) { numero++; numeroEtiqueta.setText("" + numero); } } private class OyenteBotonD implements ActionListener { public void actionPerformed(ActionEvent event) { numero--; numeroEtiqueta.setText("" + numero); } } } Caso de Estudio: Contador Implementamos los oyentes a travs de clases internas. Esta alternativa es sencilla pero solo es adecuada para GUI simples. 97 El programador redefine el mtodo actionPerformed que no va a ser invocado explcitamente por l mismo, sino que el mensaje que provoca su ejecucin est incluido en algn mtodo definido en una clase provista por Java. Esto es, el programador define (o redefine) un mtodo que l mismo NUNCA VA A INVOCAR al menos explcitamente! El mtodo recibe como argumento un objeto que tampoco ha sido creado explcitamente por el programador. Caso de Estudio: Contador 98 Observemos que estamos considerando tres tipos de objetos:
Los objeto fuente del evento Los objetos evento Los objetos oyentes (listeners) Caso de Estudio: Contador 99 Los objetos fuente del evento, estn asociados a una componente de la interfaz, tienen una representacin grfica y son capaces de percibir y reaccionar ante un evento externo provocado por una accin del usuario y disparar eventos de software. Los objetos evento que son disparados implcitamente por un objeto fuente del evento. Los objetos oyentes (listeners) que se ejecutan para manejar un evento. La clase a la que pertenece un objeto oyente brinda mtodos para manejar eventos, es decir especifica el curso de accin a seguir en respuesta a diferentes tipos de eventos. Caso de Estudio: Contador 100 Algunos componentes son contenedores de otros componentes. Un frame es un tipo especial de contenedor sobre el que puede ejecutarse una aplicacin. Un frame es una instancia de la clase JFrame y como tal tiene un atributo panel de contenido.
Interfaces Grficas en Java El panel de contenido tiene un atributo layout o diagramado de acuerdo al cual se organizan las componentes contenidas. 101 El layout de una ventana determina la apariencia de la misma. Un organizador de layout es un objeto que facilita la distribucin de las componentes dentro de un contenedor. Algunas de las clases provistas para crear organizadores son BorderLayout, FlowLayout, GridLayout. Cada clase tiene sus propias reglas de acuerdo a las cuales distribuye las componentes en el contenedor.
Interfaces Grficas en Java Layout 102 FlowLayout eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero); getContentPane().setLayout(new FlowLayout()); getContentPane().add(eti1); getContentPane().add(eti2); getContentPane().add(eti3); getContentPane().add(new JLabel(cuarto));
Permite crear organizadores muy simples, las componentes se distribuyen de izquierda a derecha en el orden en el que se agregan. Interfaces Grficas en Java 103 GridLayout eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero); eti4 = new JLabel (cuarto); getContentPane().setLayout(new GridLayout(3,2)); getContentPane().add(eti1); getContentPane().add(eti2); getContentPane().add(eti3); getContentPane().add(eti4);
Las componentes se distribuyen en una grilla cuyo nmero de filas y columnas se establece al seleccionar la clase del organizador. Interfaces Grficas en Java 104 BorderLayout BorderLayout.SOUTH
BorderLayout.CENTER
BorderLayout.NORTH BorderLayout .WEST
BorderLayout .EAST
Al agregarse cada componente se establece la regin. Interfaces Grficas en Java 105 BorderLayout eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero); getContentPane().setLayout(new BorderLayout()); getContentPane().add(eti1,BorderLayout.NORTH); getContentPane().add(eti2,BorderLayout.WEST); getContentPane().add(eti3,BorderLayout.SOUTH);
Interfaces Grficas en Java The Java Tutorials http://download.oracle.com/javase/tutorial/uiswin g/layout/index.html 106 Programacin Basada en Eventos La construccin de una GUI utiliza un modelo de programacin basado en eventos. En este modelo el orden en el cual se ejecutan las instrucciones de un programa queda determinado por eventos. Un evento es una seal de que algo ha ocurrido. En esta materia consideraremos nicamente eventos generados por acciones del usuario al interactuar con la GUI.
Programacin Basada en Eventos Algunas componentes de una GUI son reactivas, pueden percibir las acciones del usuario y reaccionar en respuesta a ellas. Una componente reactiva estn asociada a un objeto fuente del evento creado por el programador. La reaccin del sistema en respuesta a la accin del usuario va a quedar determinada por la clase a la que pertenece un objeto oyente. El objeto oyente est ligado al objeto fuente de evento a travs de una instruccin de registracin.
Programacin Basada en Eventos Un objeto fuente de evento tienen la capacidad de percibir un evento externo y disparar un evento interno, esto es, crear un objeto evento de software. Este objeto evento de software es el argumento de un mensaje enviado al objeto oyente. El mtodo que se ejecuta en respuesta a este mensaje forma parte de una interface provista por Java y es implementado por el programador en la clase del oyente.
Desarrolle una aplicacin que permita establecer si color de fondo de una ventana debe ser rojo o en verde de acuerdo al botn que se apriete. La ventana inicialmente debe aparecer as: ste es el aspecto cuando se aprieta rojo o verde: Programacin Basada en Eventos Programacin Basada en Eventos
OBJETO FUENTE detecta el evento externo JButton botonRojo OBJETO OYENTE registrado OBJETO EVENTO dispara un evento interno Los dos botones son componentes reactivas El objeto oyente recibe un mensaje con el objeto evento como parmetro OyenteBotonR ponerR ActionEvent e La construccin de una GUI va a requerir Definir clases que deriven de las clases grficas provistas por Java. Definir clases que implementen interfaces grficas provistas por Java. Crear objetos de las clases que definimos derivando las clases de los paquetes Swing o AWT Crear objetos de las clases provistas por el paquete Swing o AWT Crear objetos de las clases que implementan interfaces Interfaces Grficas en Java La construccin de una GUI va a requerir Definir clases que deriven de las clases grficas provistas por Java.
Interfaces Grficas en Java En el ejemplo vamos a definir una clase GUIFondoRojoVerde que extiende a JFrame. Como todo frame, un objeto de la clase GUIFondoRojoVerde, tendr un borde, una barra de ttulo con tres botones y un panel de contenido. En el panel de contenido vamos a insertar dos botones rotulados Rojo y Verde.
La construccin de una GUI va a requerir Definir clases que implementen interfaces grficas provistas por Java. En el ejemplo definimos dos clases: OyenteBotonR y OyenteBotonV cada una implementa a la interface ActionListener definiendo el mtodo actionPerfomed. Interfaces Grficas en Java La construccin de una GUI va a requerir Crear objetos de las clases que implementan interfaces En el ejemplo creamos dos objetos oyente uno de clase OyenteBotonR y otro OyenteBotonV Interfaces Grficas en Java La construccin de una GUI va a requerir Crear objetos de las clases provistas por el paquete Swing o AWT En el ejemplo creamos dos objetos fuentes de evento botonRojo y botonVerde ambos de la clase JButton Interfaces Grficas en Java Interfaces Grficas en Java La estructura de las GUI que hemos estamos definiendo consta de: Instrucciones para importar paquetes grficos. La definicin de una clase que crea un frame de una clase que extiende a JFrame y lo hace visible. La definicin de la clase que extiende a JFrame e incluye: Atributos asociados a componentes de la GUI y otros vinculados a la aplicacin Un constructor Clases que implementan interfaces y permiten crear oyentes Interfaces Grficas en Java //importar paquetes import java.awt.*; import javax.swing.*; ... public class GuiFondoRojoVerde extends JFrame { //definir atributos asociados a las componentes // de la GUI y de la aplicacin private JButton botonRojo,botonVerde;
//definir el contructor de la clase que extiende a JFrame public GuiFondoRojoVerde (){ //Crear los oyentes OyenteBotonR ponerRojo = new OyenteBotonR(); OyenteBotonV ponerVerde = new OyenteBotonV(); ... }
//definir clases para los oyentes class OyenteBotonR implements ActionListener {} } Interfaces Grficas en Java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GuiFondoRojoVerde extends JFrame { private JButton botonRojo, botonVerde; public GuiFondoRojoVerde (){ ... hacerGUI(); } private void hacerGUI(){ ... } class OyenteBotonR implements ActionListener {} class OyenteBotonV implements ActionListener {} }
Modulamos el cdigo a travs de un mtodo interno. Interfaces Grficas Un constructor o el mtodo invocado desde el constructor, incluye instrucciones para: establecer los valores de los atributos heredados de la clase JFrame crear objetos ligados a componentes grficas crear objetos oyente registrar los oyentes a los objetos fuente de evento establecer el diagramado de los contenedores establecer los atributos de las componentes insertar las componentes en los contenedores
Interfaces Grficas public GuiFondoRojoVerde (){ //establecer atributos heredados de JFrame setLayout(new FlowLayout()); setSize(200, 120); setDefaultCloseOperation(EXIT_ON_CLOSE); hacerGUI(); } private void hacerGUI(){ //crear los objetos ligados a las componentes grficas botonRojo = new JButton("Rojo"); botonVerde = new JButton("Verde"); //Crear los objetos oyentes OyenteBotonR ponerRojo = new OyenteBotonR(); OyenteBotonV ponerVerde = new OyenteBotonV(); //Registrar los oyentes botonRojo.addActionListener(ponerRojo); botonVerde.addActionListener(ponerVerde); //Insertar los componentes en el panel del frame getContentPane().add(botonRojo); getContentPane().add(botonVerde); } Interfaces Grficas public GuiFondoRojoVerde (){ //establecer atributos heredados de JFrame setLayout(new FlowLayout()); setSize(200, 120); setDefaultCloseOperation(EXIT_ON_CLOSE); hacerGUI(); } private void hacerGUI(){ //boton rojo botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo); getContentPane().add(botonRojo); //boton verde botonVerde = new JButton("Verde"); OyenteBotonV ponerVerde = new OyenteBotonV(); botonVerde.addActionListener(ponerVerde); getContentPane().add(botonVerde); } Interfaces Grficas
class OyenteBotonR implements ActionListener {
public void actionPerformed(ActionEvent event){ getContentPane().setBackground(Color.red); } }
class OyenteBotonV implements ActionListener {
public void actionPerformed(ActionEvent event) { getContentPane().setBackground(Color.green); } } } La clase de cada oyente es interna a la clase que especializa a JFrame La ejecucin de una aplicacin con una interfaz grfica de usuario convencional puede comenzar creando un objeto de una clase que desciende JFrame. Un objeto que es instancia de JFrame tiene un panel de contenido. En el panel de contenido pueden agregarse otros paneles, sobre los que a su vez se insertan otras componentes (en particular otros paneles). Paneles El uso de varios paneles facilita la organizacin de componentes utilizando distintos diagramados y estilos. Por ejemplo, un panel puede contener tres botones distribuidos en forma vertical y otro panel puede tener una etiqueta y dos botones debajo, uno al lado del otro. Cada panel tiene entonces un diagramado diferente. Ambos paneles se agregan al panel de contenido, que tendr su propio layout o diagramado. Paneles En el ejemplo de los botones rojo y verde, los dos botones se agregaban directamente al panel de contenido:
Paneles
botonRojo = new JButton("Rojo");
getContentPane().add(botonRojo);
El mensaje getContentPane() es enviado al frame y retorna un objeto de la clase Container Como todo contenedor, el panel de contenido puede recibir mensaje add. Una alternativa ms adecuada es organizar las componentes de una GUI de manera jerrquica. Esto es, el panel de contenido contiene dos paneles, en uno se ubican los botones y en otro se establece el color elegido. El panel de contenido va a tener un organizador de layout que determina como se distribuyen los dos paneles. El panle de botones tiene un organizador de layout que determina como se ubican los dos botones.
Paneles Paneles Desarrolle una aplicacin que permita establecer si color de fondo de una ventana debe ser rojo o en verde de acuerdo al botn del panel que se apriete. La ventana inicialmente debe aparecer as: ste es el aspecto cuando se aprieta rojo o verde: import public class GUIColorFondoPaneles extends JFrame { private Container contenedor; private JPanel panelColor, panelBotones; private JButton botonRojo, botonVerde;
public GUIColorFondoPaneles(){ contenedor = getContentPane(); //layout del panel de contenido contenedor.setLayout(new BorderLayout()); setSize(320,180); setDefaultCloseOperation(EXIT_ON_CLOSE); hacerGUI();
} } Paneles Se captura el panel de contenido del frame Paneles private void hacerGUI(){ //Se crean los paneles panelColor = new JPanel(); panelBotones = new JPanel(); //Se crean los botones y los oyentes botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo); botonVerde = new JButton(Verde"); OyenteBotonV ponerVerde = new OyenteBotonV(); botonVerde.addActionListener(ponerVerde); //Se agregan los botones al panel de botones panelBotones.add(botonRojo); panelBotones.add(botonVerde); //Se agregan los paneles al panel de contenido contenedor.add(panelColor,BorderLayout.NORTH); contenedor.add(panelBotones,BorderLayout.SOUTH); }
Paneles private void hacerGUI(){ //Se crean los paneles y se establecen atributos panelColor = new JPanel(); panelBotones = new JPanel(); panelColor.setBackground(Color.GRAY); panelColor.setPreferredSize (new java.awt.Dimension(300, 0)); panelBotones.setBackground(Color.WHITE); panelBotones.setPreferredSize (new java.awt.Dimension(300, 40));
}
Modificamos los atributos los dos paneles Modificar el layout de panelBotones para que un botn quede encima del otro. Paneles
botonRojo = new JButton("Rojo"); OyenteBotonR ponerRojo = new OyenteBotonR(); botonRojo.addActionListener(ponerRojo);
}
private class OyenteBotonR implements ActionListener { public void actionPerformed(ActionEvent event){ panelColor.setBackground(Color.red);} } Campos de texto Un campo de texto es una caja que permite ingresar una lnea de texto por teclado. Un objeto de la clase JTextField permite mantener un campo de texto Cada vez que el usuario tipea una tecla se disparan uno o ms eventos de tecla, esto es, se crean objetos de clase KeyEvent o de la clase ActionEvent. Nos interesa capturar los eventos de clase ActionEvent que se disparan cuando el usuario oprime Enter despus de tipear una cadena.
Implementar una GUI que permita ingresar el color con el que se desea pintar el panel, en una caja de texto. El color debe ingresarse con minscula. Si se ingresa rojo, verde o azul, el panel se pinta del color respectivo; si no, se pinta del color de fondo, que es gris claro. Campos de texto
public class GUIColorFondoCajaTexto extends JFrame {
} Campos de texto public class GUIColorFondoCajaTexto extends JFrame {
private class OyenteCaja implements ActionListener { public void actionPerformed(ActionEvent event){ String s = cajaColor.getText(); if (s.equals("rojo")) panelColor.setBackground(Color.red); else if (s.equals("verde")) panelColor.setBackground(Color.green); else if (s.equals("azul") panelColor.setBackground(Color.blue); else panelColor.setBackground(colorFondo); } } }
Campos de texto Cuadro de Dilogo Un cuadro de dilogo es una ventana que en general se usa para leer un valor simple y/o mostrar un mensaje. Incluye adems uno o ms botones. El mensaje puede ser un error o una advertencia y puede estar acompaado de una imagen o algn otro elemento. Para definir un dilogo standard usamos la clase JOptionPane. Las clases Printing, JColorChooser y JFileChooser permiten ofrecer dilogos ms especficos. Para crear un dilogo a medida se usa la clase JDialog directamente.
Cuadro de Dilogo Todo dilogo es dependiente de un frame. Cuando un frame se destruye, tambin se destruyen los dilogos que dependen de l. Un dilogo es modal cuando bloquea la entrada de datos del usuario a travs de todas las dems ventanas. Los cuadros de dilogo creados con JOptionPane son modales. Para crear un dilogo no modal usamos JDialog directamente.
Caso de Estudio: Cuenta Bancaria Se desea modelar una cuenta bancaria sobre la que se realizan depsitos, extracciones y consultas de saldo. La cuenta bancaria tiene asociado un cdigo y un saldo. El cdigo la identifica unvocamente y es fijo. El saldo aumenta cuando el titular de la cuenta efecta un depsito y disminuye cuando realiza una extraccin. El usuario est autorizado a girar en descubierto hasta un monto mximo establecido. El usuario opera con su cuenta bancaria a travs de una interfaz grfica como la que sigue Caso de Estudio: Cuenta Bancaria Si el usuario presiona el botn Depositar en pantalla aparece un cuadro de dilogo como el que sigue: Si el usuario presiona el botn OK aparece en pantalla un mensaje. Caso de Estudio: Cuenta Bancaria Anlogamente si el usuario presiona el botn Extraer en pantalla aparece un cuadro de dilogo como el que sigue: Si el usuario presiona el botn OK aparece en pantalla un mensaje Caso de Estudio: Cuenta Bancaria Si el usuario presiona el botn Consultar Saldos en pantalla aparece un O bien Caso de Estudio: Cuenta Bancaria Caso de Estudio: Cuenta Bancaria class Cajero public static void main(String[] args) { GUI_CtaBancaria unaCuenta = new GUI_CtaBancaria(); unaCuenta.setVisible(true); } } import public class GUI_CtaBancaria extends JFrame { private CuentaBancaria cuenta; private Container contenedor; private JPanel panelAcciones,panelConsulta; private JButton botonConsultar, botonExt, botonDep;
public GUI_CtaBancaria() {
}
}
Caso de Estudio: Cuenta Bancaria Crear la Cuenta Bancaria Capturar el panel de contenido Crear el panel de acciones y de consulta Crear cada uno de los botones y su oyente Registrar cada oyente a su botn Agregar los botones a los paneles correspondientes Agregar los paneles al panel de contenido
Caso de Estudio: Cuenta Bancaria public GUI_CtaBancaria() { cuenta = new CuentaBancaria(3); contenedor = getContentPane(); panelAcciones = new JPanel(); panelConsulta = new JPanel(); botonDep = new JButton(); botonExt = new JButton(); botonConsultar = new JButton(); setSize(210, 210); setDefaultCloseOperation(EXIT_ON_CLOSE); armarGUI(); }
Caso de Estudio: Cuenta Bancaria public void armarGUI() {
// Agregar los paneles al contenedor contenedor.add(panelAcciones, BorderLayout.NORTH); contenedor.add(panelConsulta, BorderLayout.SOUTH); } Caso de Estudio: Cuenta Bancaria Caso de Estudio: Cuenta Bancaria Agregar el oyente asociado al botn
Caso de Estudio: Cuenta Bancaria Agregar el oyente asociado al botn
Agregar el oyente asociado al botn
Caso de Estudio: Cuenta Bancaria private class OyenteDepositar implements ActionListener { public void actionPerformed(ActionEvent event){ float dep; String deposito; JOptionPane dialogo = new JOptionPane();
deposito = dialogo.showInputDialog ( "Ingrese la cantidad a depositar" ); if ((deposito != null) && (deposito.length() > 0)){ dep = Float.parseFloat(deposito); dialogo.showMessageDialog(null, "Usted deposit " + dep+ " pesos","Depsito", JOptionPane.PLAIN_MESSAGE ); cuenta.depositar(dep); } }
}
Caso de Estudio: Cuenta Bancaria private class OyenteExtraer implements ActionListener { public void actionPerformed(ActionEvent event){ float ext; String extraccion; JOptionPane dialogo = new JOptionPane(); extraccion = dialogo.showInputDialog ( "Ingrese la cantidad a extraer" ); Caso de Estudio: Cuenta Bancaria private class OyenteExtraer implements ActionListener { public void actionPerformed(ActionEvent event){ float ext; String extraccion;
if ((extraccion != null) && (extraccion.length() > 0)){ ext = Float.parseFloat(extraccion); if (cuenta.puedeExtraer(ext)){ JOptionPane.showMessageDialog( null, "Usted extrajo "+ext+ " pesos", "Extraccin", JOptionPane.PLAIN_MESSAGE ); cuenta.extraer(ext) ;} else dialogo.showMessageDialog( null, "Usted NO puede extraer esa cantidad, "Advertencia", JOptionPane.WARNING_MESSAGE ); }}}
Caso de Estudio: Cuenta Bancaria private class OyenteConsultar implements ActionListener { public void actionPerformed(ActionEvent event){ JOptionPane dialogo = new JOptionPane();
if (cuenta.obtenerSaldo()>=0) dialogo.showMessageDialog(null, "Usted tiene un saldo de " + cuenta.obtenerSaldo()+ " pesos,"SALDO,JOptionPane.INFORMATION_MESSAGE ); else dialogo.showMessageDialog(null, "Usted est en rojo en " + (-1)*cuenta.obtenerSaldo() + " pesos, "SALDO", JOptionPane.ERROR_MESSAGE ); } }
Caso de Estudio: Cuenta Bancaria Conectamos la clase CuentaBancaria a una GUI sin modificar el cdigo que est completamente encapsulado.
La clase CuentaBancaria es proveedora de servicios
La clase GUICuentaBancaria usa CuentaBancaria como una caja negra, conoce nicamente la interface y el contrato.
Podemos modificar la GUI sin cambiar la clase asociada y viceversa.
GUI y Encapsulamiento Paneles JPanel Etiquetas JLabel Textos JTextField JTextArea Botones JButton, JRadioButton Combo box JComboBox Dilogos JOptionPane JComponent Interfaces Grficas en Java La jerarqua de clases grficas JComponent JFrame La jerarqua de clases del paquete Swing Interfaces Grficas en Java JButton JComboBox JLabel JTextField JLabel JOptionPane JPanel Un panel es un rea sobre la que trabaja el usuario o se colocan otras componentes. Nosotros solo usaremos paneles como contenedores de otros paneles u otro tipo de componentes. Para definir un panel creamos un objeto de la clase JPanel. El principal atributo de un panel es el diagramado o layout que permite especificar como se organizan las dems componentes.
Paneles Los paneles van a quedar organizados de manera jerrquica. Esto es, el panel de contenido contiene paneles que a su vez pueden contener a otros paneles. El panel de contenido va a tener su organizador de layout y para cada uno de los paneles en que se divide podemos establecer tambin un organizador de layout.
Paneles Una etiqueta es una componente grfica que permite mostrar una imagen o un texto esttico. Para definir una etiqueta creamos un objeto de la clase JLabel. Una etiqueta tiene un tamao, un cono y un texto.
Etiquetas JLabel(String s) JLabel(String s, int alineacion) JLabel(Icon i) JLabel(Icon i, int alineacion) JLabel(String s, Icon i) JLabel(String s, Icon i, int alineacion) JLabel() Campos de Texto Los constructores son:
JTextField() JTextField(Document doc, String text, int col) JTextField(int col) JTextField(String text) JTextField(String text, int col) Un campo de texto es una caja que permite ingresar una lnea de texto por teclado. Para definir un campo de texto creamos un objeto de la clase JTextField Los atributos son la cadena, la cantidad de caracteres y el modelo a utilizar. Dilogos Un dilogo es una ventana que mantiene informacin temporaria . En general incluye un mensaje de error o de advertencia, pero tambin puede incluir una imagen o un rbol de directorio. Tambin incluye uno o ms botones. Usaremos la clase JOptionPane para crear cuadros de dilogo simples. Un dilogo de la clase JOptionPanel se dice modal. Un dilogo modal es visible, bloquea las entradas del usuario en todas las otras ventanas del programa.
Dilogos Los atributos de un objeto de clase JOptionPane son: cono, texto del ttulo, texto del mensaje y texto del botn Podemos utilizar un icono personalizado, no utilizar ninguno, o utilizar uno de los cuatro iconos standard de JOptionPane (question, information, warning, y error).
Los servicios provistos por JOptionPane son: showMessageDialog showConfirmDialog showOptionDialog showInputDialog
Dilogos showMessageDialog Muestra un dilogo modal con un botn, etiquetado "OK". Se puede especificar el icono y el texto del mensaje y del ttulo. Por omisin el cono es de informacin showConfirmDialog Muestra un dilogo modal con dos botones, etiquetados "Yes" y "No". Por omisin aparece el cono question. showOptionDialog Debemos especificar el texto de los botones. showInputDialog Muestra un dilogo modal que obtiene una cadena del usuario. La cadena puede ser ingresada por el usuario en un cuadro de texto o elegida de un ComboBox no editable. Por omisin aparece el cono question.
Radio Button Un radio button permite que el usuario seleccione una entre varias opciones alternativas de un grupo de botones. Para usar un grupo de botones creamos un objeto de la clase JRadioButton. La definicin de un grupo asegura que slo una de las alternativas est seleccionada.
Los constructores de un objeto de clase JLabel son:
JRadioButton(String s) JRadioButton(String s, boolean b) JRadioButton(Icon i) JRadioButton(Icon i, boolean b) JRadioButton(String s, Icon i) JRadioButton(String s, Icon i, boolean b) JRadioButton()
Radio Button Combo box Un combo box permite que el usuario seleccione una entre varias opciones alternativas. Para usar un combo box creamos un objeto de la clase JComboBox. Combo box El combo box puede ser no editable o editable. Un combo box no editable consta de una lista de valores drop-down y un botn. Un combo box editable tiene adems un campo de texto con un pequeo botn. El usuario puede elegir una opcin de la lista o tipear un valor en el campo de texto. Los combo box se usan como alternativa a los radio buttons y las listas. Combo box Combo box no editable antes y despus de hacer click sobre el botn. Combo box editable antes y despus de hacer click sobre el botn. Objetos y Eventos Cada componente de una GUI est asociada a un objeto grfico de alguna subclase de Component Los objetos grficos reactivos son objetos fuente de evento. Cuando un objeto fuente de evento dispara un evento interno, crea objetos evento de alguna subclase de EventObject provista en el paquete java.awt.event. La creacin es implcita.
Clase de los objetos Fuente de evento Clases de los objetos evento JButton ActionEvent JTextField ActionEvent, KeyEvent JComboBox ActionEvent, ItemEvent JLabel ActionEvent, ItemEvent JMenuItem ActionEvent JCheckBox ActionEvent, ItemEvent Component ComponentEvent, MouseEvent, KeyEvent, Objetos y Eventos La clase de un objeto fuente de evento determina las clases de los objeto evento que se crearn implcitamente: El objeto fuente de evento asociado a la componente reactiva dispara un evento interno creando objetos de alguna subclase de EventObject El usuario realiza una accin sobre una componente reactiva que genera un evento externo Objetos y Eventos OBJETO FUENTE Component Evento Interno OBJETO EVENTO EventObject percibe dispara crea Evento Externo Los objetos de las clases JButton, JTextField, JComboBox son objetos fuente de eventos que crean objetos evento de clase ActionEvent. Esto es, cuando el usuario realiza una accin sobre la componente asociada al objeto fuente de evento, este crea un objeto de clase ActionEvent La clase del objeto oyente que escuche estos eventos deben implementar la interface ActionListener del paquete java.awt.event.
Objetos y Eventos Implementar una interface implica definir un mtodo manejador del evento de acuerdo al comportamiento esperado en respuesta a la accin del usuario. Cualquier objeto de alguna subclase de las mencionadas crear tambin objetos evento de clase ActionEvent. Observemos que los objetos de algunas clases crearn eventos de la clase ItemEvent. Objetos y Eventos Objetos y Eventos Cada subclase de EventObject define atributos y mtodos adecuados para un tipo particular de accin del usuario, como por ejemplo, mover el mouse sobre un panel, oprimir una tecla o activar un botn. En cada uno de estos casos se crear un objeto evento de una clase especfica. Objetos y Eventos OBJETO FUENTE Component Evento Interno OBJETO EVENTO EventObject percibe dispara crea Evento Externo OBJETO Oyente ActionListener El objeto oyente es instancia de una clase que implementa una interface y redefine el mtodo responsable de reaccionar ante la accin del usuario El objeto evento es un parmetro para el mtodo manejador del evento registrado a La clase a la que pertenece el objeto fuente de evento contiene el cdigo que: percibe el evento externo dispara el evento interno invoca al manejador de evento definido en la clase del oyente. Objetos y Eventos La interface define uno o ms mtodos manejadores que deben ser implementados considerando el comportamiento esperado en respuesta a la accin del usuario. La lista de parmetros de un manejador de eventos siempre consiste en un argumento del tipo de clase evento. Objetos y Eventos Objeto Evento Interface de oyente Manejador ActionEvent ActionListener actionPerformed(ActionEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) MouseEvent MouseListener mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent) KeyEvent KeyListener keyPressed(KeyEvent) keyRealesed(KeyEvent) keyTyped(KeyEvent) Objetos y Eventos GUI Polimorfismo y Ligadura Dinmica
botonRojo.addActionListener(ponerRojo); cajaColor.addActionListener(cColor); JButton JTextField OyenteBotonRojo OyenteCaja En qu clase se define addActionListener? De qu clase debera ser el parmetro?
Maquina Expendedora Una fbrica produce dos tipos diferentes de mquinas expendedoras de infusiones, M111 y R101. Las mquinas del tipo M111 preparan caf, caf con leche, t, t con leche y submarino. Tienen depsitos para los siguientes ingredientes: caf, t, leche y cacao. Las mquinas de tipo R101 preparan caf, t y caf carioca . Tienen depsitos para caf, t, crema y cacao.
Maquina Expendedora Los depsitos tienen las siguientes capacidades mximas: Caf 1500 T 1000 Leche 600 Cacao 600 Crema 600 Adems de la capacidad mxima de cada ingrediente, cada mquina mantiene registro de la cantidad disponible. Maquina Expendedora Cuando se habilita una mquina las cantidades disponibles comienzan con el valor mximo de cada ingrediente. La cantidad disponible aumenta cuando se carga el depsito con un ingrediente especfico y disminuye cada vez que se prepara una infusin. El aumento es variable, aunque nunca se puede superar la capacidad mxima de cada ingrediente. Si el valor que se intenta cargar, sumado al disponible, supera al mximo, se completa hasta el mximo y retorna el sobrante. Maquina Expendedora Cada vez que se solicita una infusin se reducen los ingredientes de acuerdo a la siguiente tabla:
Caf Caf con leche Submarino T con leche caf carioca Caf 40 30 30 Leche 20 50 20 T 20 Cacao 40 10 Crema 30 En el caso de la preparacin de una taza de t, la mquina M111 utiliza 10 grs y la mquina R101 15 grs.
MaquinaExpendedora <<atributos de instancia>> caf t cacao <<comandos>> cafe() <<consultas>> obtenerCafe() : entero M111 <<atributos de instancia>> leche <<comandos>> teConLeche() submarino() <<consultas>> obtenerLeche() : entero R101 <<atributos de instancia>> crema <<comandos>> carioca () <<consultas>> obtenerCrema(): entero
Maquina Expendedora Comenzaremos implementando parcialmente una GUI para una mquina expendedora del modelo R101
Maquina Expendedora Inialmente est activo el botn para preparar caf y uno para el Empleado que permite cargar ingredientes Si se oprime el botn Caf aparece un cartel informativo y el nico botn activo es el que debe seleccionarse al retirar el vaso
Cuando oprime el botn correspondiente a una infusin y la mquina puede prepararla, se observa lo que s muestra la segunda figura. En el caso de no poder obtenerse la bebida, se muestra lo que se observa en la figura 3. En cada caso, se debe apretar la tecla habilitada para volver a la primera ventana. El botn con el texto Empleado debe cargar la mquina al mximo y debe informar al empleado, mediante una caja de mensaje, cunto se carg de cada ingrediente.
Maquina Expendedora Si la cantidad de ingredientes no es suficiente se muestra un cartel y se activa el botn que permite volver al estado inicial.
Maquina Expendedora Si se elige el botn Empleado se cargan todos los ingredientes hasta llegar al mximo y aparece un cartel informativo:
Maquina Expendedora Al oprimir Aceptar vuelve a aparecer la pantalla inicial.
} Un constructor incluye instrucciones para: capturar el panel de contenido crear paneles, etiquetas y botones crear objetos oyente para los botones establecer el diagramado y atributos de los paneles establecer los atributos de etiquetas y botones insertar botones y etiquetas en los paneles y los paneles en el panel de contenido Maquina Expendedora Maquina Expendedora public GUI_R101() { unaMaquina = new R101();
contenedor = getContentPane(); botonCafe = new JButton() ; botonRetirarInfusion = new JButton() ; botonEmpleado = new JButton() ; cartelSalida = new JLabel(); cartelBebida = new Jlabel(); panelBotones = new JPanel(); panelES = new JPanel() ; panelRetirar = new JPanel() ; panelEmpleado = new JPanel() ; initGUI(); }
Maquina Expendedora private void initGUI() {
BoxLayout esteLayout = new BoxLayout(contenedor,BoxLayout.Y_AXIS) ; contenedor.setLayout(esteLayout);
OyenteCafe oCafe = new OyenteCafe(); botonCafe.setText("Caf"); botonCafe.setFont(new Font("Arial",1,22)); botonCafe.addActionListener(oCafe);
} Maquina Expendedora private void initGUI() {
OyenteRetirar oRetirar = new OyenteRetirar();
botonRetirarInfusion.setText ("Apriete aqu para retirar su infusin o pedir otra"); botonRetirarInfusion.setEnabled(false); botonRetirarInfusion.setFont(new Font("SansSerif",1,14)); botonRetirarInfusion.setBorder (BorderFactory.createEtchedBorder(BevelBorder.LOWERED)); botonRetirarInfusion.setPreferredSize (new Dimension(360, 32)); botonRetirarInfusion.addActionListener(oRetirar);
} Maquina Expendedora private void initGUI() {
OyenteEmpleado oEmpleado = new OyenteEmpleado();
botonEmpleado.setText("Empleado"); botonEmpleado.setPreferredSize(new Dimension(306, 55)); botonEmpleado.setFont(new Font("Times New Roman",0,18));
botonEmpleado.addActionListener(oEmpleado);
} Maquina Expendedora private void initGUI() {
GridLayout panelBotonesLayout = new GridLayout(4, 1) ;
private void habilitarBotones(){ botonCafe.setEnabled(true); botonRetirarInfusion.setEnabled(false);; botonEmpleado.setEnabled(true); } } Maquina Expendedora public class GUI_R101 extends JFrame {
class OyenteCafe implements ActionListener{
public void actionPerformed(ActionEvent evt) {
int cantVasos = unaMaquina.vasosCafe(); if (cantVasos>=1){ unaMaquina.cafe(); cartelSalida.setText("Aqu tiene su caf"); cartelBebida.setText("CAF"); } else { cartelSalida.setText("No puede preparar caf"); cartelBebida.setText(""); } deshabilitarBotones(); } }
} Maquina Expendedora public class GUI_R101 extends JFrame {
} Maquina Expendedora botonCafe botonTe botonCafeCarioca Complete la implementacin con los botones que faltan Maquina Expendedora botonCafe botonTe botonCafeCarioca botonBahiano Implemente una GUI para la mquina R101 Plus panelBotones panelES panelRetirar panelEmpleado botonCafe botonRetirarInfusion botonCafeEmpleado cartelSalida cartelBebida La GUI incluye diferentes tipos de componentes pero en este caso slo los botones son reactivos. Maquina Expendedora
public class GUI_R101 extends JFrame { private R101 unaMaquina;
} Maquina Expendedora Componentes - Canvas La clase Canvas permite representar elementos grficos en pantalla. A travs de su mtodo paint(Graphics g) se realizan todos los dibujos sobre el canvas. Es la ocurrencia de la clase Graphics la que permite realmente pintar elementos grficos, el canvas es el soporte. Graphics2D hereda de Graphics, aportando una mayor funcionalidad. A travs de un downcasting se puede utilizar este objeto ms refinado. Graphics2D g2d = (Graphics2D) g; Componentes - Canvas Clase Graphics Mtodos: drawString(String, int, int) drawOval(int, int, int, int) drawRect(int, int, int, int) drawArc(int, int, int, int, int, int) drawImage(Image, int, int, ImageObserver) drawLine(int, int, int, int) drawPolygon(int[], int[], int) setColor(Color) setFont(Font) Componentes - Canvas Crear un rea de dibujo: class MiCanvas extends Canvas implements MouseListener { int x=50;int y=50;int radioX=30;int radioY=30; MiCanvas() { this.setBackground(Color.white); this.addMouseListener(this); this.setFont(new Font("Courier", Font.BOLD, 24)); this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } public void paint(Graphics g) { g.setColor(Color.red); g.drawString("Dibuja Circunferencias",50,20); g.setColor(Color.blue); g.drawLine(50,40,340,40); g.setColor(Color.green); g.drawOval(x,y,radioX, radioY); } Componentes Canvas (continuacin) public void mousePressed(MouseEvent e) { x=e.getX(); y=e.getY(); }
public void mouseReleased(MouseEvent e) { radioX=(e.getX()-x); radioY=(e.getY()-y); this.repaint(); }
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {} }
Posteriormente se podr aadir una ocurrencia de la clase MiCanvas a cualquier Frame como un componente ms Eventos java.awt.event Este paquete proporciona las clases e interfaces necesarias para gestionar los diferentes tipos de eventos de los componentes de AWT. Los eventos ms importantes que una aplicacin grfica puede registrar son: Ratn Ratn (Drag & Drop) Accin Teclado Ventana Un evento del tipo accin se produce cuando se acciona algn control Eventos java.awt.event Para que los componentes puedan recibir eventos deben registrarse previamente indicando qu clase va a gestionarlos. Esta tarea se realiza a travs de la invocacin del mtodo addInterfaz(clase a gestionar el evento). Estas clases deben implementar los interfaces que se correspondan con cada tipo de evento e indicar las acciones a ejecutar en el caso que se active el evento. Los interfaces ms utilizados son los siguientes: EventListener MouseListener MouseMotionListener ActionListener KeyLIstener WindowListener Componentes y sus Listeners Eventos java.awt.event Estas interfaces definen una serie de mtodos que se corresponden con las diferentes acciones asociadas a un tipo de evento determinado. Por ejemplo, en un evento de teclado, el usuario puede presionar o soltar una tecla. Por lo tanto, cuando definamos la clase implementando la interfaz correspondiente, se tendrn que implementar todos los mtodos definidos en l. Existen tres posibilidades para definir una clase que gestione los eventos de un componente: Crear una nueva clase. Utilizar la clase que define la ventana, como clase que adems gestionar los eventos. Definir una clase annima dentro de la clase de ventana Eventos java.awt.event Eventos java.awt.event Si se desea obtener informacin del evento producido, se puede hacer a travs del argumento de cada mtodo invocado. Por ejemplo, si se desea saber la tecla que se ha pulsado sobre una caja de texto, deberemos operar de la siguiente manera: Aplicar un listener que gestione los eventos de tipo teclado sobre la caja de texto: cajaTexto.addKeyListener(new A()); Implementar el interface KeyListener con todos sus mtodos. Identificar el mtodo asociado al evento pulsar una tecla. Trabajar con el objeto que recibe el mtodo en el argumento, ya que es ste quin posee toda la informacin del evento producido Jerarqua de Interfaces de Eventos
Jerarqua de Interfaces de Eventos Clases que implementan los interfaces: java.awt.event.KeyAdapter (implements KeyListener) java.awt.event.MouseAdapter (implements MouseListener) java.awt.event.MouseMotionAdapter (implements MouseMotionListener) java.awt.event.WindowAdapter (implements WindowListener) La ventaja que nos proporcionan las clases del tipo Adapter es que realizan la implementacin de todos los mtodos de la interface. De esta manera, se puede heredar de ella, y slo se redefinir el mtodo necesario.
Eventos de Ventana Definidos en el interface WindowListener: Mtodos: public void windowClosed(WindowEvent event) public void windowDeiconified(WindowEvent event) public void windowIconified(WindowEvent event) public void windowActivated(WindowEvent event) public void windowDeactivated(WindowEvent event) public void windowOpened(WindowEvent event) public void windowClosing(WindowEvent event)
Ejemplo eventos de ventana (I) Ejemplo de implementacin del interface. class Ventana extends Frame implements WindowListener { Ventana() { ; this.addWindowListener(this); } //Hay que implementar todos los mtodos public void windowClosed(WindowEvent event) { } public void windowDeiconified(WindowEvent event) { } public void windowIconified(WindowEvent event) { } public void windowActivated(WindowEvent event) { } public void windowDeactivated(WindowEvent event) { } public void windowOpened(WindowEvent event) { } public void windowClosing(WindowEvent event) {System.exit(0);} }
Ejemplo eventos de ventana (II) Ejemplo sin implementacin del interface, a travs de la utilizacin de una clase annima interna. Implementacin del interfaz a travs de WindowAdapter. nicamente se implementa el mtodo deseado. De esta manera, no es nuestra clase la que gestiona el evento, sino la clase annima creada de dentro de ella. class Ventana extends Frame { Ventana() { this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; } } Eventos de Teclado Implementar el interface KeyListener: Mtodos: public void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e)
Eventos de Teclado Ejemplo Ejemplo de implementacin del interface. public class ClienteWindow extends Applet implements KeyListener {
textoMensaje.addKeyListener(this);
public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if(KeyEvent.VK_ENTER == code) {
} } } Eventos sobre Components Implementar el interface ActionListener: Mtodos: public void actionPerformed(ActionEvent e) Ejemplo de Eventos sobre componentes (I) Ejemplo de implementacin del interface. public class ClienteWindow extends Applet implements ActionListener {
boton.addActionListener(this);
public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == boton) {
} }
Ejemplo de Eventos sobre componentes (II) Ejemplo sin implementacin del interface, a travs de la utilizacin de una clase annima. boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
} }; Eventos de Ratn Implementar el interface MouseListener: Mtodos: public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e COMO CREAR USANDO SWING JLabel Crear una etiqueta:
JLabel etiq=new JLabel("Nombre: "); /* En la siguiente sentencia se asigna un color a la etiqueta utilizando el constructor Color(R,G,B) */ etiq.setForeground(new Color(255,0,0)); //Rojo etiq.setFont(new Font("Times New Roman",Font.BOLD, 12));
JButton Crear un botn:
JButton botonSalir = new JButton("Aceptar");
Gestin de eventos: botonSalir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); System.exit(0); } });
JText Crear una caja de texto: JTextField textNombre = new JTextField(10);
Gestin de eventos: textNombre.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if ((int)e.getKeyChar()== KeyEvent.VK_ENTER) System.out.println(textNombre.getText()); } });
JComboBox Crear una lista combinada: String datos[] = { Uno, Dos, Tres, Cuatro, Cinco}; JComboBox lista = new JComboBox (datos); lista.setBorder(BorderFactory.createLineBorder(Color .red, 4));
Gestin de eventos: lista.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(lista.getSelectedItem()); } });
JCheckBox Crear una casilla de verificacin: JCheckBox ch=new JCheckBox("Estudiante", new ImageIcon("images/off.gif"), false); ch.setRolloverSelectedIcon(new ImageIcon("images/over.gif")); ch.setRolloverIcon(new ImageIcon("images/over.gif")); ch.setSelectedIcon(new ImageIcon("images/on.gif"));
Gestin de eventos: ch.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(ch.isSelected()) mostrarMensaje("Check Activado"); } });
JRadioButton Crear una botn de opcin: ButtonGroup grupo = new ButtonGroup(); rb1 = new JRadioButton("Hombre"); rb2 = new JRadioButton("Mujer"); rb1.setSelected(true); rb1.setMnemonic(KeyEvent.VK_H); rb2.setMnemonic(KeyEvent.VK_M); grupo.add(rb1); grupo.add(rb2); Gestin de eventos: rb1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(rb1.isSelected()) mostrarMensaje("Radio Hombre Activado"); } });
JOptionPane Esta clase se utiliza para crear cualquier tipo de dialogo estndar para mostrar o recoger informacin. Relacin (Tipo de dilogo Mtodo esttico): Dilogo de Confirmacin (Si/No/Cancelar) showConfirmDialog Dilogo de Entrada - showInputDialog Dilogo de Mensaje - showMessageDialog Dialogo Personalizable - showOptionDialog Ejemplo: String nombre = JOptionPane.showInputDialog(this, "<html>Introduzca su <u>nombre</u>, por favor:</html>"); JOptionPane.showMessageDialog(this, "<html><H3>Proceso finalizado satisfactoriamente</H3></html>"); JFileChooser Permite mostrar los dilogos de Abrir y Guardar como... Relacin (Tipo de dilogo Mtodo instancia): Dilogo de Abrir showOpenDialog Dilogo de Guardar como... showSaveDialog Ejemplo: JFileChooser j = new JFileChooser(); int rtn = j.showOpenDialog(this); if (rtn == JFileChooser.APPROVE_OPTION) System.out.println(j.getSelectedFile().getPath());
Look & Feel Modifica la apariencia de nuestra ventana. Tipos:
Ejemplo: int i=1; //Apariencia Motif UIManager.LookAndFeelInfo looks[]; looks = UIManager.getInstalledLookAndFeels(); try { UIManager.setLookAndFeel(looks[i].getClassName()); SwingUtilities.updateComponentTreeUI(this); } catch(Exception e) {} Metal (0) Motif (1) Windows (2) Windows Classic (3) Look & Feel Tambin es posible pasar como parmetro el nombre de la clase del Look & Feel: Metal javax.swing.plaf.metal.MetalLookAndFeel Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel Windows Classic com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
Cada ventana puede tener su propia barra de mens. AWT ofrece: JMenuBar: para crear la barra de mens JMenu: para los diferente mens de la barra Elementos del men: instancias de la clase JMenuItem para elementos normales. instancias de la clase JCheckBoxMenuItem. otros mens. separadores, gracias al mtodo addSeparator().