Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Control Es
Control Es
Resumen
Las interfaces graficas de usuario se han convertido en una parte muy importante del software,
no solo por la funcionalidad y la facilidad de manejo que puedan llegar a representar sino
tambin porque hace de un software que sea atractivo.
Por ello vamos a adentrarnos en Java, para estudiar como podemos crear tres de los
componentes mas importantes y sobre todo mas usados de muchas de las aplicaciones de hoy en
da; estos son los botones, los checkboxes y los botones de radio, pero tambin se har un repaso
sobre la evolucin en la creacin de estos y otros componentes y las ventajas que ha supuesto.
Abstract
The graphic user interfaces had become an important part of software, not only by the function
and easy use that can represent for us, also because they make software attractive for the user.
That is why we are gone to learn how Java can help us in the creation of buttons, checkboxes
and radio button.
Also we will look back to see the advantage that we have experimented between old and new
packages.
ii
Tabla de Contenidos
1. Introduccin (pg.1)
2.Programacin de GUIs en Java (pg.1)
2.1.Introduccin (pg.1)
2.2.AWT (Abstract Windowing Toolkit) (pg.5)
2.3.Swing (pg.5)
2.3.1.Diferencias entre Swing y AWT (pg.6)
2.3.2.Herencia (pg.7)
2.3.3.Componentes de Swing (pg.8)
3.JButton, JCheckBox y JRadioButton (pg.14)
3.1.Introduccin (pg.14)
3.2.Herencia (pg.14)
3.3.Eventos (pg.14)
3.4.JButton (pg.16)
3.4.1.Mtodos y constructores (pg.16)
3.4.2.Ejemplo (pg.18)
3.5.JCheckBox (pg.20)
3.5.1.Mtodos y constructores (pg.21)
3.5.2.Ejemplo (pg.21)
3.6.JRadioButton (pg.24)
3.6.1.Mtodos y constructores (pg.24)
3.7.2.Ejemplo (pg.25)
5.Conclusiones (pg.29)
4.Bibliografia (pg.30)
iii
1.
Introduccin
La exigencia, cada vez mayor, de contar con interfaces graficas de usuario (GUIs) sencillas,
claras y potentes exige a los programadores un gran esfuerzo para conseguir los resultados
ptimos; (entendiendo por GUI, al software que permite la interaccin entre el usuario y los
servicios que ofrece el sistema operativo, utilizando para ello una representacin grafica
intuitiva de alto nivel).
Lo que estamos creando en realidad es una interfaz ilustrada de un programa:
proporcionamos una apariencia visual de la interfaz del software; es por ello que facilitan tanto
la interpretacin del programa por parte del usuario. Este es capaz de interactuar con el software
de forma intuitiva y sin tener que invertir apenas tiempo en estudiar el qu tiene que hacer
para conseguir el resultado que espera.
Gracias al impacto que supuso la generalizacin de los entornos grficos a partir de los 80,
disponemos actualmente de lenguajes de programacin muy potentes y que facilitan la tarea de
los desarrolladores, no solo con la lgica del programa sino tambin con las GUIs.
La estructura de un GUI es de forma natural orientada a objetos y su programacin
orientada a eventos. Es decir, se trabaja con objetos pero el flujo del programa no es secuencial
respecto al cdigo, sino que se corresponde con los eventos que suceden al interactuar el usuario
con la interfaz. Por ejemplo, al pulsar un botn.
El objeto de estudio van a ser las clases JButton, JChecBox y JRadioButton que
forman parte de los componentes GUI de Swing, que se encuentran en el paquete
javax.swing del lenguaje de programacin Java. Dentro del paquete javax.swing
podemos encontrar multitud de subclases que combinadas y usadas de la forma adecuada nos
permiten crear una GUI.
Seguidos de las caractersticas ms destacadas de cada clase se describen sus mtodos mas
importantes y constructores, seguidos por unos ejemplos.
2.
2.1. Introduccin
La programacin en un GUI determinado requiere el uso de un toolkit (o SDK) para ese GUI, en
el lenguaje de programacin que queramos utilizar. Existe siempre un toolkit oficial que
proporciona el fabricante del GUI, normalmente para C o C++. Por ejemplo MFC para
programacin en Windows.
Tambin existen toolkits alternativos desarrollados por terceros, ya sean comerciales o
gratuitos como OWL (C++) de Borland para Windows; o un toolkit multiplataforma, como
GTK+ (para C), Qt , Fltk (ambos para C++).
Puesto que Java pretende ser un lenguaje multiplataforma, el diseo de su toolkit para
programacin de GUIs se hizo pensando en que las aplicaciones tuvieran un buen aspecto en
cualquier plataforma pero independiente de cualquier GUI especfico. Este toolkit se denomin
AWT 1.0 (Abstract Window Toolkit):
-1-
<<J. Ovejero>>
Fig.2: Swing
A pesar de que Swing tiene un estilo visual propio por defecto, puede tambin utilizar un
aspecto Motif, Windows o Apple; estos ltimos slo en las plataformas correspondientes.
Adems puede cambiar de aspecto en tiempo de ejecucin.
Aspecto Swing por defecto:
Aspecto Motif:
Aspecto Windows:
<<J. Ovejero>>
2.3. Swing
El paquete Swing es el nuevo paquete grafico que ha aparecido en la versin 1.2 de Java. Esta
compuesto por un amplio conjunto de componentes de interfaces de usuario y que pretenden
funcionar en el mayor numero posible de plataformas. Cada uno de los componentes de este
paquete puede presentar diversos aspectos y comportamientos en funcin de una biblioteca de
clases.
En la versin 1.0 de Swing, que corresponde a la distribuida en la versin 1.2 del API de
Java se incluyen tres bibliotecas de aspecto y comportamiento para Swing:
<<J. Ovejero>>
-Objetos de accin (action objects): Estos objetos cuando estn activados (enabled)
controlan las acciones de varios objetos componentes de la interfaz. Son hijos de
ActionListener.
-Contenedores anidados: Cualquier componente puede estar anidado en otro. Por ejemplo,
un grfico se puede anidar en una lista.
-Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de mltiples
documentos" mediante las clases JDesktopPane y JInternalFrame.
-Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes. Adems el
usuario puede crear tipos de bordes personalizados.
-Dilogos personalizados: Se pueden crear multitud de formas de mensajes y opciones de
dilogo con el usuario, mediante la clase JOptionPane.
-Clases para dilogos habituales: Se puede utilizar JFileChooser para elegir un fichero,
y JColorChooser para elegir un color.
-Componentes para tablas y rboles de datos: Mediante las clases JTable y JTree.
-Potentes manipuladores de texto: Adems de campos y reas de texto, se presentan
campos de sintaxis oculta JPassword, y texto con mltiples fuentes JTextPane. Adems
hay paquetes para utilizar ficheros en formato HTML o RTF.-Capacidad para "deshacer": En
gran variedad de situaciones se pueden deshacer las modificaciones que se realizaron.
2.3.2 Herencia
La relacin de ms abajo muestra una jerarqua de herencia de las clases que definen los
atributos y comportamientos comunes para la mayora de los componentes Swing. Cada clase
aparece con su nombre y con el nombre completo de su paquete. La mayor parte de la
funcionalidad de cada componente GUI se deriva de esas clases.
java.lang.Object->java.awt.Component->java.awt.Container->javax.swing.JComponent
Los componentes Swing que corresponden a subclases de JComponent tienen muchas
caractersticas, las cuales incluyen:
-Una apariencia visual adaptable que puede utilizarse para personalizar la apariencia visual
cuando el programa se ejecuta en distintas plataformas
-Teclas de acceso directo (llamadas mnemnicos) para acceder directamente a los
componentes GUI a travs del teclado.
-Herramientas para manejo de eventos comunes, para casos en los que componentes GUI
inician las mismas acciones en un programa.
-Breves descripciones del propsito de un componente GUI (que se conocen como cuadros
de informacin de herramientas) que aparecen cuando el cursor del ratn se posiciona sobre el
componente durante un periodo de tiempo corto.
-Soporte para tecnologas de asistencia tales como lectores de pantalla braille para personas
ciegas.
-Soporte para localizacin de la interfaz de usuario; es decir, para personalizar la interfaz
de usuario de manera que aparezca en distintos lenguajes y convenciones culturales.
Fig.7: JFrame
Fig.8: JDialog
-JInternalFrame: Consiste simplemente en una ventana hija, que no puede salir de los
lmites marcados por la ventana principal. Es muy comn en aplicaciones que permiten tener
varios documentos abiertos simultneamente.
Fig.9: JInternalFrame
<<J. Ovejero>>
-JPanel: Un panel sirve para agrupar y organizar otros componentes. Puede estar
decorado mediante un borde y una etiqueta.
Fig.10: JPanel
Fig.11: JScrollPane
-JSplitPane: Permite visualizar dos componentes, uno a cada lado, con la posibilidad
de modificar la cantidad de espacio otorgado a cada uno.
Fig.12: JSplitPane
-JTabbedPane: Permite definir varias hojas con pestaas, que pueden contener otros
componentes. El usuario puede seleccionar la hoja que desea ver mediante las pestaas.
Fig.13: JTabbedPane 1
Fig.14: JToolBar 1
Controles bsicos:
-JButton, JCheckBox, JRadioButton: Distintos tipos de botones. Un check box
sirve para marcar una opcin. Un radio button permite seleccionar una opcin entre varias
disponibles.
-JComboBox: Las combo boxes o listas desplegables que permiten seleccionar un opcin
entre varias posibles.
Fig.16: JComboBox
Fig.17: JList
10
<<J. Ovejero>>
Fig.18: JTextField
Fig.19: JSlider
Fig.20: JSpinner
-Mens desplegables. Existen dos tipos de mens:
JMenuBar, que consiste en una barra de mens desplegables en la parte superior de la
aplicacin, y JPopupMenu, un men que se obtiene al pulsar con el botn derecho del ratn
sobre una zona determinada. Los mens estn compuestos por distintos tems:
JSeparator (una lnea de separacin entre opciones), JMenuItem (una opcin
ordinaria), JMenu (un submenu), JCheckboxMenuItem (un opcin en forma de check box)
o finalmente JradioButtonMenuItem (una opcin en forma de radio button).
Fig.21: Menus
11
Controles especializados:
-JColorChooser: Consiste en un selector de colores.
Fig.22: JColorChooser
Fig.23: JFileChooser
Fig.24: JTree
12
<<J. Ovejero>>
Fig.25: JLabel
-JProgressBar: Permite mostrar que porcentaje del total de una tarea a realizar ha sido
completado.
Fig.26: JProgressBar
-JToolTip: Consiste en una etiqueta de ayuda que surge al cabo de uno segundos sobre
la posicin apuntada por el cursor. Normalmente no es necesario utilizar directamente la clase
JToolTip, se puede establecer para cualquier componente de la ventana mediante:
e.setToolTipText (Esta es la etiqueta).
Fig.27: JToolTip
13
3.
3.1. Introduccin
Ahora vamos a profundizar en uno de los controles bsicos de Swing: los botones. Los botones
son una de las piezas claves en la mayora de interfaces graficas de usuario ya que permiten al
usuario, por ejemplo, tanto elegir entre varias opciones (radio buttons), seleccionar las
caractersticas que quiere que tenga su ventana da aplicacin (check boxes), o simplemente
trasladar al software su deseo de realizar una determinada accin.
Por eso adems de saber de donde provienen las clases JRadioButton, JCheckBox y
JButton, es necesario que hagamos un breve estudio sobre la gestin de eventos, para
comprender que adems de situar y crear correctamente nuestro botn, hay que indicarle lo que
queremos que haga cuando se realiza una accin determinada sobre el.
3.2. Herencia
La siguiente relacin nos muestra la herencia de las clases que estudiaremos posteriormente:
-Tanto javax.swing.JCheckbox como javax.swing.JRadioButton
son subclases de javax.swing.JToggleButton
-javax.swing.JToggleButton y javax.swing.JButton
son subclases de javax.swing.AbstractButton
-javax.swing.AbstractButton es subclase de javax.swin.JComponent
3.3.
Eventos
Las GUI`s estn controladas por eventos (generan eventos cuando el usuario interacta con la
GUI). Siempre que ocurre una interaccin con el usuario se enva un evento al programa. La
informacin de los eventos de la GUI se almacena en un objeto de una clase que extiende a
AWTEvent.
Los eventos que vamos a gestionar en los ejemplos correspondientes a nuestros
componentes pertenecen al paquete java.awt.event. Tambin se han agregado tipos de
eventos adicionales, especficos para varios tipos de componentes Swing. Estos eventos se
definen en el paquete javax.swing.event.
Para procesar un evento de interfaz grafica de usuario, el programador debe realizar dos
tareas clave:
-Registrar un componente que escuche eventos (es un objeto de una clase que implementa
una o ms de las interfaces que escuchan eventos correspondientes a los paquetes
java.awt.event y javax.swing.event).
-Implementar un manejador de eventos (mtodo que se invoca automticamente en
respuesta a un tipo especfico de evento).
14
<<J. Ovejero>>
Cualquier clase que implemente a una interfaz deber definir todos los mtodos de esa
interfaz; en caso contrario, ser una clase abstract y no podra utilizarse para crear objetos.
Al uso de componentes que escuchan eventos en el manejo de eventos se conoce como
modelo de delegacin de eventos; el procesamiento de un evento se delega a un objeto
especfico en el programa.
Cuando ocurre un evento, el componente GUI que interactu con el usuario, notifica a sus
componentes de escucha registrados, por medio de una llamada al mtodo manejador de eventos
apropiado de cada componente de escucha.
Existen ciertos event listeners que son comunes a todos los componentes. Los que vienen a
continuacin (se usan en lso ejemplos) son producidos especficamente por los componentes
JRadioButton, JCheckBox y JButton:
-ActionListener: captura cierto tipo de accin realizada sobre ciertos componentes.
Por ejemplo, pulsar un botn, seleccionar un elemento en una lista desplegable o
una opcin en un men.
-ItemListener: recoge el cambio de estado en un componente tipo on/off: check
boxes, radio buttons y listas desplegables.
Si la interfaz captura un nico tipo de evento, como ActionListener, normalmente
tendr una nica operacin a implementar:
void actionPerformed (ActionEvent e)
15
podemos utilizar la operacin getSource() del evento recibido. Esta situacin es muy
frecuente cuando la clase principal hace de listener de los subcomponentes.
3.4. JButton
Un botn es un componente en el que el usuario hace clic para desencadenar una accin
especifica (genera un evento ActionEvent).
Al texto en la cara de un objeto JButton se le llama etiqueta del botn. Tener mas de un
objeto JButton con la misma etiqueta hace que los objetos JButton sean ambiguos para el
usuario (cada etiqueta de botn debe ser nica).
Un objeto JButton puede mostrar objetos Icon, esto proporciona un nivel adicional de
interactividad visual. Tambin puede tener un objeto de sustitucin, que es un objeto Icon que
aparece cuando el ratn se posiciona sobre el botn; el icono en el botn cambia a medida que el
ratn se aleja y se acerca al rea del botn en la pantalla.
Propsito
JButton(String, Icon)
JButton(String)
JButton(Icon)
JButton()
void setText(String)
String getText()
void setIcon(Icon)
Icon getIcon()
void setDisabledIcon(Icon)
Icon getDisabledIcon()
void setPressedIcon(Icon)
Icon getPressedIcon()
void setSelectedIcon(Icon)
Icon getSelectedIcon()
void
setDisabledSelectedIcon(Icon)
Icon getDisabledSelectedIcon()
16
<<J. Ovejero>>
setRolloverEnabled(boolean)
boolean getRolloverEnabled()
void setRolloverIcon(Icon)
Icon getRolloverIcon()
Utiliza
setRolloverEnabled(true)
y
setRolloverIcon(someIcon) para hacer que el botn
muestre el icono especificado cuando el cursor pasa
sobre l.
void
setRolloverSelectedIcon(Icon)
Icon getRolloverSelectedIcon()
Propsito
Selecciona u obtiene dnde debe situarse el contenido
del botn. La clase AbstractButton permite uno de
los siguientes valores para alineamineto horizontal:
LEFT, CENTER (por defecto), y LEFT. Para
alineamiento vertical: TOP, CENTER (por defecto),
y BOTTOM.
void setMargin(Insets)
Insets getMargin()
void
setFocusPainted(boolean) Selecciona u obtiene si el botn debera parecer
diferente si obtiene el foco.
boolean isFocusPainted()
void setBorderPainted(boolean) Selecciona u obtiene si el borde del botn debera
dibujarse.
boolean isBorderPainted()
17
Propsito
Selecciona la tecla alternativa para pulsar
el botn.
Selecciona u obtiene el nombre de la
accin realizada por el botn.
Void
addActionListener(ActionListener) Aade o elimina un objeto que escucha
eventos action disparados por el botn.
ActionListener removeActionListener()
void addItemListener(ItemListener)
ItemListener removeItemListener()
void setSelected(boolean)
boolean isSelected()
void doClick()
void doClick(int)
3.4.2 Ejemplo
En este ejemplo igual que en los dems se va a crear una pequea aplicacin que nos muestre
una iniciacin a como crear el correspondiente componente.
Vamos a crear dos objetos JButton y demostramos que soportan el despliegue de
objetos Icon. El manejo de eventos se lleva a cabo mediante una sola instancia de la clase
interna ManejadorBoton.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaBoton extends JFrame {
private JButton botonSimple, botonElegante;
public PruebaBoton()
{
super( "Prueba de botones" );
Container c = getContentPane();
c.setLayout( new FlowLayout() );
// crea los botones
botonSimple = new JButton( "Boton simple" );
18
<<J. Ovejero>>
mismo
//
crea
una
instancia
de
la
clase
interna
//anejadorBoton para usarla en el manejo de eventos
//de botn
ManejadorBoton manejador = new ManejadorBoton();
botonElegante.addActionListener( manejador );
botonSimple.addActionListener( manejador );
setSize( 300, 100 );
show();
} // fin del constructor de PruebaBoton
19
3.5. JCheckBox
La versin Swing soporta botones checkbox con la clase JCheckBox. Swing tambin soporta
checkboxes
en
mens,
utilizando
la
clase
JCheckBoxMenuItem.
Como
JcheckBoxMenuItem y JcheckBox descienden de AbstractButton, los checkboxes
de Swing tienen todas las caractersticas de un botn normal.
Los checkboxes son similares a los botones de radio, pero su modelo de seleccin:
ninguno, alguno o todos, pueden ser seleccionados. Sin embargo en un grupo de botones de
radio, solo puede haber uno seleccionado.
Los mtodos de AbstractButton que son mas utilizados son setMnemonic,
addItemListener, setSelected y isSelected.
20
<<J. Ovejero>>
JCheckBoxMenuItem(String)
JCheckBoxMenuItem(String,boolean)
JCheckBoxMenuItem(Icon)
JCheckBoxMenuItem(String,Icon)
JCheckBoxMenuItem(String,Icon, boolean)
JCheckBoxMenuItem()
Propsito
Crea un ejemplar de JCheckBox. El
argumento string especfica el texto, si
existe, que el checkbox debera mostrar.
De forma similar, el argumento Icon
especfica la imagen que debera
utilizarse en vez de la imagen por
defecto del aspecto y comportamiento.
Especificando el argumento booleano
como true se inicializa el checkbox
como seleccionado. Si el argumento
booleano no existe o es false, el
checkbox
estar
inicialmente
desactivado.
Crea
un
ejemplar
de
JCheckBoxMenuItem. Los argumentos
se interpretan de la misma forma que en
los constructores de JCheckBox.
3.5.2 Ejemplo
Utilizamos dos objetos de la clase JCheckBox para cambiar el estilo de la fuente del texto
desplegado en un objeto JTextField. Uno aplica un estilo de negritas al seleccionarlo y el
otro un estilo de cursivas. Ambos pueden aplicarse a la vez. De inicio ninguno esta
seleccionado.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
21
debe
definir
ManejadorCasillaVerificacionmanejador
ManejadorCasillaVerificacion();
el
metodo
new
negrita.addItemListener( manejador );
cursiva.addItemListener( manejador );
addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
} // fin del mtodo windowClosing
} // fin de la clase interna annima
); // fin de addWindowListener
22
<<J. Ovejero>>
ManejadorCasillaVerificacion
implements
if ( e.getSource() == cursiva )
if ( e.getStateChange() == ItemEvent.SELECTED )
valCursiva = Font.ITALIC;
else
valCursiva = Font.PLAIN;
23
3.6. JRadioButton
Los Botones de Radio son grupos de botones en los que, por convencin, slo uno de ellos
puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y
ButtonGroup. Para poner un botn de radio en un men, se utiliza la clase
JRadioButtonMenuItem. Otras formas de presentar una entre varias opciones son los
combo boxes y las listas.
Como JRadioButton desciende de AbstractButton, los botones de radio Swing
tienen todas las caractersitcas de los botones normales.Los mtodos de AbstractButton
que ms se utilizan son setMnemonic, addItemListener, setSelected, y
isSelected.
Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y
aadirle cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la
seleccin anterior cuando el usuario selecciona otro botn del grupo.
Generalmente se debera inicializar un grupo de botones de radio para que uno de ellos est
seleccionado. Sin embargo, la API no fuerza esta regla un grupo de botones de radio puede no
tener seleccin inicial. Una vez que el usuario hace una seleccin, no existe forma para
desactivar todos los botones de nuevo.
Cada vez que el usuario pulsa un botn de radio, (incluso si ya estaba seleccionado), el
botn dispara un evento action. Tambin ocurren uno o dos eventos tem: uno desde el botn
que acaba de ser seleccionado, y otro desde el botn que ha perdido la seleccin (si exista).
Normalmente, las pulsaciones de los botones de radio se manejan utilizando un oyente de
action.
Propsito
Crea un ejemplar de ButtonGroup.
Aade un botn a un grupo, o elimina un botn de un
grupo
24
<<J. Ovejero>>
-RadioButton
Constructor
Propsito
JRadioButtonMenuItem(String)
JRadioButtonMenuItem(Icon)
JRadioButtonMenuItem(String,
Icon)
JRadioButtonMenuItem()
3.6.2 Ejemplo
Segn se seleccione uno u otro animal, se mostrara en la parte derecha de la ventana.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
JLabel picture;
25
public RadioButtonDemo() {
26
<<J. Ovejero>>
birdButton.addActionListener(myListener);
catButton.addActionListener(myListener);
dogButton.addActionListener(myListener);
rabbitButton.addActionListener(myListener);
pigButton.addActionListener(myListener);
//establecemos la dimension
picture.setPreferredSize(new Dimension(177,122));
en
cinco
setLayout(new BorderLayout());
//el panel se cargara en el oeste y la imagen se mostrara en el
//centro
add(radioPanel, BorderLayout.WEST);
add(picture, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}
27
//birdButton.setActionCommand(birdString);
//en todos los botones de radio, ahora sabemos que
//imagen tenemos que mostrar con
//e.getActionCommand()
class RadioListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
picture.setIcon(new ImageIcon("images/"
+ e.getActionCommand()+ ".gif"));
}
}
frame.getContentPane().add(new
RadioButtonDemo(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}}
28
<<J. Ovejero>>
4.
Conclusiones
La creacin de una interfaz grafica en muchos casos puede ser una tarea compleja debido a la
cantidad de componentes que la componen.
Toda esa complejidad se puede dividir en la complejidad de crear cada uno de sus
componentes, como JCheckBox, JButton y JRadioButton, cuyos mtodos y constructores
facilitan la tarea del programador al ser intuitivos y fciles de utilizar.
Adems la caracterstica fundamental de Java, la multiplataforma, hace de la portabilidad
un hecho, aunque a veces pagando el precio de looks diferentes en cada plataforma.
29
5.
Bibliografia
30