SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
SWING: JButton, JCheckBox y JRadioButton 
Javier Ovejero Sánchez 
Departamento de Informática y Automática 
Universidad de Salamanca
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 
también 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 
día; estos son los botones, los checkboxes y los botones de radio, pero también se hará un repaso 
sobre la evolución en la creación de estos y otros componentes y las ventajas que ha supuesto. 
i
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
iii 
Tabla de Contenidos 
1. Introducción (pg.1) 
2.Programación de GUIs en Java (pg.1) 
2.1.Introducción (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.Introducción (pg.14) 
3.2.Herencia (pg.14) 
3.3.Eventos (pg.14) 
3.4.JButton (pg.16) 
3.4.1.Métodos y constructores (pg.16) 
3.4.2.Ejemplo (pg.18) 
3.5.JCheckBox (pg.20) 
3.5.1.Métodos y constructores (pg.21) 
3.5.2.Ejemplo (pg.21) 
3.6.JRadioButton (pg.24) 
3.6.1.Métodos y constructores (pg.24) 
3.7.2.Ejemplo (pg.25) 
5.Conclusiones (pg.29) 
4.Bibliografia (pg.30)
- 1 - 
1. Introducción 
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 interacción entre el usuario y los 
servicios que ofrece el sistema operativo, utilizando para ello una representación 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 interpretación 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 generalización de los entornos gráficos a partir de los 80, 
disponemos actualmente de lenguajes de programación muy potentes y que facilitan la tarea de 
los desarrolladores, no solo con la lógica del programa sino también con las GUIs. 
La estructura de un GUI es de forma natural orientada a objetos y su programación 
orientada a eventos. Es decir, se trabaja con objetos pero el flujo del programa no es secuencial 
respecto al código, sino que se corresponde con los eventos que suceden al interactuar el usuario 
con la interfaz. Por ejemplo, al pulsar un botón. 
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 programación 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 características más destacadas de cada clase se describen sus métodos mas 
importantes y constructores, seguidos por unos ejemplos. 
2. Programación de GUIs en Java 
2.1. Introducción 
La programación en un GUI determinado requiere el uso de un toolkit (o SDK) para ese GUI, en 
el lenguaje de programación que queramos utilizar. Existe siempre un toolkit “oficial” que 
proporciona el fabricante del GUI, normalmente para C o C++. Por ejemplo MFC para 
programación en Windows. 
También 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 diseño de su toolkit para 
programación de GUIs se hizo pensando en que las aplicaciones tuvieran un buen aspecto en 
cualquier plataforma pero independiente de cualquier GUI específico. Este toolkit se denominó 
AWT 1.0 (Abstract Window Toolkit):
<<SWING: JButton, JCheckBox y JRadioButton>> 
2 
Fig.1: AWT 1.0 
Realmente las aplicaciones AWT 1.0 tenían un aspecto mediocre y un escaso número de 
elementos. Además su diseño interno era muy deficiente. 
La situación mejoró algo con AWT 1.1, pero no fue hasta Java 1.2 cuando apareció Swing 
(Realmente Swing no sustituye a AWT. Swing está construido como una capa sobre AWT, que 
sigue estando disponible en la biblioteca de clases Java), un toolkit completamente nuevo, con 
un diseño interno orientado a componentes y un look mucho más satisfactorio:
<<J. Ovejero>> 
3 
Fig.2: Swing 
A pesar de que Swing tiene un estilo visual propio por defecto, puede también utilizar un 
aspecto “Motif”, “Windows” o “Apple”; estos últimos sólo en las plataformas correspondientes. 
Además puede cambiar de aspecto en tiempo de ejecución. 
Aspecto Swing por defecto: 
Fig.3: Swing por defecto
<<SWING: JButton, JCheckBox y JRadioButton>> 
4 
Aspecto Motif: 
Fig.4: Swing Motif 
Aspecto Windows: 
Fig.5: Swing Windows
<<J. Ovejero>> 
2.2. AWT (Abstract Windowing Toolkit) 
Las JFC (Java Foundation Classes) son parte de la API de Java, compuesto por clases que 
sirven para crear interfaces gráficas visuales para las aplicaciones y applets de Java. JFC fue 
presentado por primera vez en la conferencia de desarrolladores JavaOneSM de 1997. Tanto 
AWT como Swing, son paquetes gráficos contenidos en las JFC. 
5 
AWT es por tanto un conjunto de herramientas GUI diseñadas para trabajar con múltiples 
plataformas. Este paquete viene incluido en la API de Java como java.awt ya desde su 
primera versión, con lo que las interfaces generadas con esta biblioteca funcionan en todos los 
entornos Java disponibles. También funcionan en navegadores que soporten Java lo que les hace 
especialmente eficientes para la creación de applets. En la siguiente figura podemos observar las 
principales clases de AWT: 
Fig.6: Principales clases AWT 
2.3. Swing 
El paquete Swing es el nuevo paquete grafico que ha aparecido en la versión 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 función de una biblioteca de 
clases. 
En la versión 1.0 de Swing, que corresponde a la distribuida en la versión 1.2 del API de 
Java se incluyen tres bibliotecas de aspecto y comportamiento para Swing:
<<SWING: JButton, JCheckBox y JRadioButton>> 
6 
metal.jar: Aspecto y comportamiento independiente de la plataforma. 
motif.jar: Basado en la interfaz Sun Motif. 
windows.jar: Muy similar a las interfaces Microsoft Windows 95. 
2.3.1 Diferencias entre Swing y AWT 
Los componentes Swing, están escritos, se manipulan y se despliegan completamente en Java 
(ofrecen mayor portabilidad y flexibilidad). Por ello se les llama componentes puros de Java. 
Como están completamente escritos en Java y no les afectan las complejas herramientas GUI de 
la plataforma en la que se utilizan, también se les conoce comúnmente como componentes 
ligeros. De hecho de las principales diferencias entre los componentes de java.awt y de 
javax.swing es que los primeros están enlazados directamente a las herramientas de la 
interfaz grafica de usuario de la plataforma local. 
Por lo tanto, un programa en Java que se ejecuta en distintas plataformas Java tiene una 
apariencia distinta e incluso, algunas veces hasta la iteraciones del usuario son distintas en cada 
plataforma (a la apariencia y a la forma en que el usuario interactúa con el programa se les 
conoce como la “apariencia visual del programa”). 
Sin embargo los componentes Swing permiten al programador especificar una apariencia 
visual distinta para cada plataforma, una apariencia visual uniforme entre todas las plataformas, 
o incluso puede cambiar la apariencia visual mientras el programa se ejecuta. 
A los componentes AWT que se enlazan a la plataforma local se les conoce como 
componentes pesados (dependen del sistema de ventanas de la plataforma local para determinar 
su funcionalidad y su apariencia visual). Cada componente pesado tiene un componente 
asociado (del paquete java.awt.peer), el cual es responsable de las interacciones entre el 
componente pesado y la plataforma local para mostrarlo y manipularlo. 
Varios componentes Swing siguen siendo pesados. En particular las subclases de 
java.awt.Window, que muestran ventanas en la pantalla, aun requieren de una interacción 
directa con el sistema de ventanas local.(En consecuencia, los componentes pesados de Swing 
son menos flexibles) 
Otras ventajas de Swing respecto a AWT son: 
-Amplia variedad de componentes: En general las clases que comiencen por "J" son 
componentes que se pueden añadir a la aplicación. Por ejemplo: JButton. 
-Aspecto modificable (look and feel): Se puede personalizar el aspecto de las interfaces o 
utilizar varios aspectos que existen por defecto (Metal Max, Basic Motif, Window Win32). 
-Arquitectura Modelo-Vista-Controlador: Esta arquitectura da lugar a todo un enfoque de 
desarrollo muy arraigado en los entornos gráficos de usuario realizados con técnicas orientadas 
a objetos. Cada componente tiene asociado una clase de modelo de datos y una interfaz que 
utiliza. Se puede crear un modelo de datos personalizado para cada componente, con sólo 
heredar de la clase Model. 
-Gestión mejorada de la entrada del usuario: Se pueden gestionar combinaciones de teclas 
en un objeto KeyStroke y registrarlo como componente. El evento se activará cuando se 
pulse dicha combinación si está siendo utilizado el componente, la ventana en que se encuentra, 
o algún hijo del componente.
<<J. Ovejero>> 
7 
-Objetos de acción (action objects): Estos objetos cuando están 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 gráfico se puede anidar en una lista. 
-Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de múltiples 
documentos" mediante las clases JDesktopPane y JInternalFrame. 
-Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes. Además el 
usuario puede crear tipos de bordes personalizados. 
-Diálogos personalizados: Se pueden crear multitud de formas de mensajes y opciones de 
diálogo con el usuario, mediante la clase JOptionPane. 
-Clases para diálogos 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: Además de campos y áreas de texto, se presentan 
campos de sintaxis oculta JPassword, y texto con múltiples fuentes JTextPane. Además 
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 relación de más abajo muestra una jerarquía de herencia de las clases que definen los 
atributos y comportamientos comunes para la mayoría 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 
características, 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 mnemónicos) para acceder directamente a los 
componentes GUI a través 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 propósito de un componente GUI (que se conocen como cuadros 
de información de herramientas) que aparecen cuando el cursor del ratón se posiciona sobre el 
componente durante un periodo de tiempo corto. 
-Soporte para tecnologías de asistencia tales como lectores de pantalla braille para personas 
ciegas. 
-Soporte para localización de la interfaz de usuario; es decir, para personalizar la interfaz 
de usuario de manera que aparezca en distintos lenguajes y convenciones culturales.
<<SWING: JButton, JCheckBox y JRadioButton>> 
8 
2.3.3 Componentes de Swing 
Contenedores básicos: 
-JFrame: Representa una ventana básica, capaz de contener otros componentes. Casi 
todas las aplicaciones construyen al menos un Jframe. 
Fig.7: JFrame 
-JDialog, JOptionPane, etc: Los cuadros de diálogo son JFrame restringidos, 
dependientes de un JFrame principal. Los JOptionPane son cuadros de diálogo sencillos 
predefinidos para pedir confirmación, realizar advertencias o notificar errores. Los JDialog 
son cuadros de diálogo generales, normalmente utilizados para peticiones de datos. 
Fig.8: JDialog 
-JInternalFrame: Consiste simplemente en una ventana hija, que no puede salir de los 
límites marcados por la ventana principal. Es muy común en aplicaciones que permiten tener 
varios documentos abiertos simultáneamente. 
Fig.9: JInternalFrame
<<J. Ovejero>> 
9 
-JPanel: Un panel sirve para agrupar y organizar otros componentes. Puede estar 
decorado mediante un borde y una etiqueta. 
Fig.10: JPanel 
-JScrollPane: Es un panel que permite visualizar un componente de un tamaño mayor 
que el disponible, mediante el uso de barras de desplazamiento. 
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 pestañas, que pueden contener otros 
componentes. El usuario puede seleccionar la hoja que desea ver mediante las pestañas. 
Fig.13: JTabbedPane 1
<<SWING: JButton, JCheckBox y JRadioButton>> 
-JToolBar: Es un contenedor que permite agrupar otros componentes, normalmente 
botones con iconos en una fila o columna. Las barras de herramientas tienen la particularidad de 
que el usuario puede situarlas en distintas configuraciones sobre el frame principal. 
10 
Fig.14: JToolBar 1 
Controles básicos: 
-JButton, JCheckBox, JRadioButton: Distintos tipos de botones. Un check box 
sirve para marcar una opción. Un radio button permite seleccionar una opción entre varias 
disponibles. 
Fig.15: JButton, JCheckBox, JRadioButton 
-JComboBox: Las combo boxes o listas desplegables que permiten seleccionar un opción 
entre varias posibles. 
Fig.16: JComboBox 
-JList: Listas que permiten seleccionar uno o más elementos. 
Fig.17: JList
<<J. Ovejero>> 
11 
-JTextField, JFormattedTextField, JpasswordField: Distintos tipos de 
editores. JFormattedTextField permite indicar el conjunto de caracteres legales que 
pueden introducirse. JPasswordField no muestra el contenido. 
Fig.18: JTextField 
-JSlider: Un slider permiten introducir un valor numérico entre un máximo y un mínimo 
de manera rápida. 
Fig.19: JSlider 
-JSpinner: Permiten seleccionar un valor entre un rango de opciones posibles, al igual 
que las listas desplegables, aunque no muestran tal lista. Los valores cambian al pulsar los 
botones de desplazamiento. También se puede introducir un valor directamente. 
Fig.20: JSpinner 
-Menús desplegables. Existen dos tipos de menús: 
JMenuBar, que consiste en una barra de menús desplegables en la parte superior de la 
aplicación, y JPopupMenu, un menú que se obtiene al pulsar con el botón derecho del ratón 
sobre una zona determinada. Los menús están compuestos por distintos ítems: 
JSeparator (una línea de separación entre opciones), JMenuItem (una opción 
ordinaria), JMenu (un submenu), JCheckboxMenuItem (un opción en forma de check box) 
o finalmente JradioButtonMenuItem (una opción en forma de radio button). 
Fig.21: Menus
<<SWING: JButton, JCheckBox y JRadioButton>> 
12 
Controles especializados: 
-JColorChooser: Consiste en un selector de colores. 
Fig.22: JColorChooser 
-JFileChooser: Permite abrir un cuadro de diálogo para pedir un nombre de fichero. 
Fig.23: JFileChooser 
-JTree: Su función es mostrar información de tipo jerárquico. 
Fig.24: JTree
<<J. Ovejero>> 
13 
Controles básicos no interactivos: 
-JLabel: Permite situar un texto, un texto con una imagen o una imagen únicamente en la 
ventana. No son interactivos y puede utilizarse código HTML para escribir texto en varias líneas 
y con varios atributos. 
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 posición 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
<<SWING: JButton, JCheckBox y JRadioButton>> 
14 
3. JButton, JCheckBox, JRadioButton 
3.1. Introducción 
Ahora vamos a profundizar en uno de los controles básicos de Swing: los botones. Los botones 
son una de las piezas claves en la mayoría de interfaces graficas de usuario ya que permiten al 
usuario, por ejemplo, tanto elegir entre varias opciones (radio buttons), seleccionar las 
características que quiere que tenga su ventana da aplicación (check boxes), o simplemente 
trasladar al software su deseo de realizar una determinada acción. 
Por eso además de saber de donde provienen las clases JRadioButton, JCheckBox y 
JButton, es necesario que hagamos un breve estudio sobre la gestión de eventos, para 
comprender que además de situar y crear correctamente nuestro botón, hay que indicarle lo que 
queremos que haga cuando se realiza una acción determinada sobre el. 
3.2. Herencia 
La siguiente relación 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 están controladas por eventos (generan eventos cuando el usuario interactúa con la 
GUI). Siempre que ocurre una interacción con el usuario se envía un evento al programa. La 
información 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. También se han agregado tipos de 
eventos adicionales, específicos 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 más de las interfaces que escuchan eventos correspondientes a los paquetes 
java.awt.event y javax.swing.event). 
-Implementar un manejador de eventos (método que se invoca automáticamente en 
respuesta a un tipo específico de evento).
<<J. Ovejero>> 
15 
Cualquier clase que implemente a una interfaz deberá definir todos los métodos de esa 
interfaz; en caso contrario, será una clase abstract y no podría utilizarse para crear objetos. 
Al uso de componentes que escuchan eventos en el manejo de eventos se conoce como 
“modelo de delegación de eventos”; el procesamiento de un evento se delega a un objeto 
específico 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 método manejador de eventos 
apropiado de cada componente de escucha. 
Existen ciertos event listeners que son comunes a todos los componentes. Los que vienen a 
continuación (se usan en lso ejemplos) son producidos específicamente por los componentes 
JRadioButton, JCheckBox y JButton: 
-ActionListener: captura cierto tipo de acción realizada sobre ciertos componentes. 
Por ejemplo, pulsar un botón, seleccionar un elemento en una lista desplegable o 
una opción 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 operación a implementar: 
void actionPerformed (ActionEvent e) 
Existen dos formas básicas de implementación de nuestro event listener: 
-Utilizar la clase principal frame, frame interior o cuadro de diálogo como receptor de los 
eventos de los subcomponentes. Para ello basta con hacer que implemente la correspondiente 
interfaz. 
Esta opción es simple y eficiente, sin embargo, puede darse el caso de que las operaciones 
implementadas de la interfaz reciban eventos de varios componentes. Además la clase no va a 
poder redefinir un adaptador (para las interfaces con más de una operación como 
WindowListener, la librería proporciona una clase adaptadora (WindowAdapter) que 
implementa la interfaz mediante implementaciones vacías por defecto, de forma que podamos 
heredar y redefinir la operación que nos interesa en lugar de tener que implementar toda la 
interfaz), al heredar ya de una clase previamente. 
-Construir una pequeña clase interior que implemente la interfaz. Esta opción es más 
flexible y permite definir directamente un procesamiento único para cada evento/componente 
que lo genera. Sin embargo la definición de nuevas clases y la creación de objetos interiores la 
hacen menos eficiente (Es la opción que utilizaremos en los ejemplos). 
Una vez implementado el listener, indicaremos al componente que lo utilice para notificar 
sus eventos mediante: 
componente.addxxxxListener (objetoListener) 
donde xxxx será el identificador del tipo de listener. 
Un componente puede ser conectado a varios listeners del mismo o distintos eventos. De la 
misma forma, un listener puede ser conectado a varios componentes al mismo tiempo. En estos 
casos para determinar dentro del listener cuál es el componente que ha enviado el evento
<<SWING: JButton, JCheckBox y JRadioButton>> 
podemos utilizar la operación getSource() del evento recibido. Esta situación es muy 
frecuente cuando la clase principal hace de listener de los subcomponentes. 
3.4. JButton 
Un botón es un componente en el que el usuario hace clic para desencadenar una acción 
especifica (genera un evento ActionEvent). 
Al texto en la cara de un objeto JButton se le llama etiqueta del botón. Tener mas de un 
objeto JButton con la misma etiqueta hace que los objetos JButton sean ambiguos para el 
usuario (cada etiqueta de botón debe ser única). 
Un objeto JButton puede mostrar objetos Icon, esto proporciona un nivel adicional de 
interactividad visual. También puede tener un objeto de sustitución, que es un objeto Icon que 
aparece cuando el ratón se posiciona sobre el botón; el icono en el botón cambia a medida que el 
ratón se aleja y se acerca al área del botón en la pantalla. 
3.4.1 Métodos y constructores 
Ahora que sabemos como es visualmente cada uno de los componentes (visto en el punto 2.3.3), 
hay que destacar los métodos y constructores más relevantes que nos permitirán configurar los 
componentes según nuestras necesidades. 
16 
-Contenido del botón 
Método o Constructor Propósito 
JButton(String, Icon) 
JButton(String) 
JButton(Icon) 
JButton() 
Crea un ejemplar de JButton, lo inicializa para tener 
el texto/imagen especificado. 
void setText(String) 
String getText() Selecciona u obtiene el texto mostrado en el botón. 
void setIcon(Icon) 
Icon getIcon() 
Selecciona u obtiene la imagen mostrada por el botón 
cuando no está seleccionado o pulsado. 
void setDisabledIcon(Icon) 
Icon getDisabledIcon() 
Selecciona u obtiene la imagen mostrada por el botón 
cuando está desactivado. Si no se especifica una 
imagen, el aspecto y comportamiento crea una por 
defecto. 
void setPressedIcon(Icon) 
Icon getPressedIcon() 
Selección u obtiene la imagen mostrada por el botón 
cuando está pulsado. 
void setSelectedIcon(Icon) 
Icon getSelectedIcon() 
void 
setDisabledSelectedIcon(Icon) 
Icon getDisabledSelectedIcon() 
Selecciona u obtiene la imagen mostrada por el botón 
cuando está seleccionado. Si no se especifica una 
imagen de botón desactivado seleccionado, el 
aspecto y comportamiento crea una manipulando la 
imagen de seleccionado.
<<J. Ovejero>> 
setRolloverEnabled(boolean) 
boolean getRolloverEnabled() 
void setRolloverIcon(Icon) 
Icon getRolloverIcon() 
void 
setRolloverSelectedIcon(Icon) 
Icon getRolloverSelectedIcon() 
17 
Utiliza setRolloverEnabled(true) y 
setRolloverIcon(someIcon) para hacer que el botón 
muestre el icono especificado cuando el cursor pasa 
sobre él. 
-Ajustes sobre la apariencia del botón 
Método o constructor Propósito 
void setHorizontalAlignment(int) 
void setVerticalAlignment(int) 
int getHorizontalAlignment() 
int getVerticalAlignment() 
Selecciona u obtiene dónde debe situarse el contenido 
del botón. 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 
setHorizontalTextPosition(int) 
void setVerticalTextPosition(int) 
int getHorizontalTextPosition() 
int getVerticalTextPosition() 
Selecciona u obtiene dónde debería situarse el texto 
del botón con respecto a la imagen. 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() 
Selecciona u obtiene el número de píxeles entre el 
borde del botón y sus contenidos. 
void setFocusPainted(boolean) 
boolean isFocusPainted() 
Selecciona u obtiene si el botón debería parecer 
diferente si obtiene el foco. 
void setBorderPainted(boolean) 
boolean isBorderPainted() 
Selecciona u obtiene si el borde del botón debería 
dibujarse.
<<SWING: JButton, JCheckBox y JRadioButton>> 
18 
-Funcionalidad del boton 
Método o Constructor Propósito 
void setMnemonic(char) 
char getMnemonic() 
Selecciona la tecla alternativa para pulsar 
el botón. 
void setActionCommand(String) 
String getActionCommand(void) 
Selecciona u obtiene el nombre de la 
acción realizada por el botón. 
Void addActionListener(ActionListener) 
ActionListener removeActionListener() 
Añade o elimina un objeto que escucha 
eventos action disparados por el botón. 
void addItemListener(ItemListener) 
ItemListener removeItemListener() 
Añade o elimina un objeto que escucha 
eventos items disparados por el botón. 
void setSelected(boolean) 
boolean isSelected() 
Selecciona u obtiene si el botón está 
seleccionado. Tiene sentido sólo en 
botones que tienen un estado on/off, 
como los checkbox. 
void doClick() 
void doClick(int) 
Realiza un "click". El argumento 
opcional especifica el tiempo (en 
milisegundos) que el botón debería estar 
pulsado. 
3.4.2 Ejemplo 
En este ejemplo igual que en los demás se va a crear una pequeña aplicación que nos muestre 
una iniciación 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" );
<<J. Ovejero>> 
19 
//agregamos el boton al panel de contenido 
c.add( botonSimple ); 
//creamos dos objetos ImageIcon que representan al 
//objeto Icon predeterminado y al objeto Icon de 
//sustitucion para el botonElegante. 
//los gif se presupone que estan en el mismo 
//directorio que la aplicación que las utiliza 
Icon icono1 = new ImageIcon( "icono1.gif" ); 
Icon icono2 = new ImageIcon( "icono2.gif" ); 
//crea el boton con el gif y el texto (texto a la 
//derecha del icono como predeterminado) 
botonElegante = new JButton("Boton elegante",icono1); 
//se utiliza el metodo setRollOverIcon heredado de 
//AbstractButton para especificar la imagen que 
//aparece cuando el raton se posiciona sobre el boton 
botonElegante.setRolloverIcon( icono2 ); 
//agregamos el boton al panel de contenido 
c.add( botonElegante ); 
// crea una instancia de la clase interna 
//anejadorBoton para usarla en el manejo de eventos 
//de botón 
ManejadorBoton manejador = new ManejadorBoton(); 
botonElegante.addActionListener( manejador ); 
botonSimple.addActionListener( manejador ); 
setSize( 300, 100 ); 
show(); 
} // fin del constructor de PruebaBoton
<<SWING: JButton, JCheckBox y JRadioButton>> 
20 
public static void main( String args[] ) 
{ 
PruebaBoton ap = new PruebaBoton(); 
ap.addWindowListener( 
new WindowAdapter() { 
public void windowClosing( WindowEvent e ) 
{ 
System.exit( 0 ); 
} // fin del método windowClosing 
} // fin de la clase interna anónima 
); // fin de addWindowListener 
} // fin de main 
// clase interna para el manejo de eventos de botón 
private class ManejadorBoton implements ActionListener { 
public void actionPerformed( ActionEvent e ) 
{ 
//mostramos un cuadro de dialogo de mensaje que contiene la 
//etiqueta del boton que se pulso 
JOptionPane.showMessageDialog( null, 
"Usted oprimio:" + e.getActionCommand() ); 
} 
} 
} 
3.5. JCheckBox 
La versión Swing soporta botones checkbox con la clase JCheckBox. Swing también soporta 
checkboxes en menús, utilizando la clase JCheckBoxMenuItem. Como 
JcheckBoxMenuItem y JcheckBox descienden de AbstractButton, los checkboxes 
de Swing tienen todas las características de un botón normal. 
Los checkboxes son similares a los botones de radio, pero su modelo de selección: 
ninguno, alguno o todos, pueden ser seleccionados. Sin embargo en un grupo de botones de 
radio, solo puede haber uno seleccionado. 
Los métodos de AbstractButton que son mas utilizados son setMnemonic, 
addItemListener, setSelected y isSelected.
<<J. Ovejero>> 
3.5.1 Metodos y constructores 
21 
Constructor Propósito 
JCheckBox(String) 
JCheckBox(String,boolean) 
JCheckBox(Icon) 
JCheckBox(Icon,boolean) 
JCheckBox(String,Icon) 
JCheckBox(String,Icon,boolean) 
JCheckBox() 
Crea un ejemplar de JCheckBox. El 
argumento string específica el texto, si 
existe, que el checkbox debería mostrar. 
De forma similar, el argumento Icon 
específica la imagen que debería 
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. 
JCheckBoxMenuItem(String) 
JCheckBoxMenuItem(String,boolean) 
JCheckBoxMenuItem(Icon) 
JCheckBoxMenuItem(String,Icon) 
JCheckBoxMenuItem(String,Icon, boolean) 
JCheckBoxMenuItem() 
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.*; 
public class PruebaCasillaVerificacion extends JFrame { 
private JTextField t; 
private JCheckBox negrita, cursiva; 
public PruebaCasillaVerificacion() 
{ 
super( "Prueba de JCheckBox" ); 
Container c = getContentPane(); 
c.setLayout(new FlowLayout());
<<SWING: JButton, JCheckBox y JRadioButton>> 
//creamos e inicializamos el objeto JTextField 
t = new JTextField( "Texto que cambia", 28 ); 
//establecemos el estilo de la fuente y añadimos al panel 
t.setFont( new Font( "TimesRoman",Font.PLAIN, 14 ) ); 
c.add( t ); 
// crea los objetos casilla de verificación 
negrita = new JCheckBox( "Negrita" ); 
c.add( negrita ); 
cursiva = new JCheckBox( "Cursiva" ); 
c.add( cursiva ); 
//si se hace click en un objeto JCheckBox se genera un 
//ItemEvent que puede ser manejado por un ItemListener 
//(cualquier objeto de una clase que implemente la interfaz 
//ItemListener) 
//un objeto ItemListener debe definir el metodo 
//itemStateChanged 
ManejadorCasillaVerificacionmanejador = new 
ManejadorCasillaVerificacion(); 
negrita.addItemListener( manejador ); 
cursiva.addItemListener( manejador ); 
22 
addWindowListener( 
new WindowAdapter() { 
public void windowClosing( WindowEvent e ) 
{ 
System.exit( 0 ); 
} // fin del método windowClosing 
} // fin de la clase interna anónima 
); // fin de addWindowListener 
setSize( 325, 100 ); 
show(); 
} // fin del constructor de PruebaCasillaVerificacion
<<J. Ovejero>> 
public static void main( String args[] ) 
23 
{ 
new PruebaCasillaVerificacion(); 
} 
private class ManejadorCasillaVerificacion implements 
ItemListener { 
private int valNegrita = Font.PLAIN; 
private int valCursiva = Font.PLAIN; 
//con e.getSource() determinamos el onjeto sobre el que se hizo 
//click 
//con las estructuras if-else se determina cual fue modificado y 
//la accion que tenemos que llevar a cabo 
public void itemStateChanged( ItemEvent e ) 
{ 
if ( e.getSource() == negrita ) 
if ( e.getStateChange() == ItemEvent.SELECTED ) 
valNegrita = Font.BOLD; 
else 
valNegrita = Font.PLAIN; 
if ( e.getSource() == cursiva ) 
if ( e.getStateChange() == ItemEvent.SELECTED ) 
valCursiva = Font.ITALIC; 
else 
valCursiva = Font.PLAIN; 
//establecemos los tipos de la nueva fuente 
t.setFont( 
new Font( "TimesRoman", valNegrita + valCursiva, 14 ) ); 
//repintamos el texto 
t.repaint(); 
} // fin del método itemStateChanged 
} // fin de la clase interna //ManejadorCasillaVerificacion 
} // fin de la clase PruebaCasillaVerificacion
<<SWING: JButton, JCheckBox y JRadioButton>> 
3.6. JRadioButton 
Los Botones de Radio son grupos de botones en los que, por convención, sólo uno de ellos 
puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y 
ButtonGroup. Para poner un botón 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 caracterísitcas de los botones normales.Los métodos de AbstractButton 
que más se utilizan son setMnemonic, addItemListener, setSelected, y 
isSelected. 
Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y 
añadirle cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la 
selección anterior cuando el usuario selecciona otro botón del grupo. 
Generalmente se debería 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 selección inicial. Una vez que el usuario hace una selección, no existe forma para 
desactivar todos los botones de nuevo. 
Cada vez que el usuario pulsa un botón de radio, (incluso si ya estaba seleccionado), el 
botón dispara un evento action. También ocurren uno o dos eventos ítem: uno desde el botón 
que acaba de ser seleccionado, y otro desde el botón que ha perdido la selección (si existía). 
Normalmente, las pulsaciones de los botones de radio se manejan utilizando un oyente de 
action. 
24 
3.6.1 Metodos y constructores 
-ButtonGroups 
Método Propósito 
ButtonGroup() Crea un ejemplar de ButtonGroup. 
void add(AbstractButton) 
void 
remove(AbstractButton) 
Añade un botón a un grupo, o elimina un botón de un 
grupo
<<J. Ovejero>> 
25 
-RadioButton 
Constructor Propósito 
JRadioButton(String) 
JRadioButton(String,boolean) 
JRadioButton(Icon) 
JRadioButton(Icon, boolean) 
JRadioButton(String, Icon) 
JRadioButton(String, Icon, 
boolean) 
JRadioButton() 
Crea un ejemplar de JRadioButton. El argumento 
string especifica el texto, si existe, que debe mostrar 
el botón de radio. Similarmente, el argumento, Icon 
especifica la imagen que debe usar en vez la imagen 
por defecto de un botón de radio para el aspecto y 
comportamiento. Si se especifica true en el 
argumento booleano, inicializa el botón de radio 
como seleccionado, sujeto a la aprovación del objeto 
ButtonGroup. Si el argumento booleano esta 
ausente o es false, el botón de radio está inicialmente 
deseleccionado. 
JRadioButtonMenuItem(String) 
JRadioButtonMenuItem(Icon) 
JRadioButtonMenuItem(String, 
Icon) 
JRadioButtonMenuItem() 
Crea un ejemplar de JRadioButtonMenuItem. Los 
argumentos se interpretan de la misma forma que los 
de los constructores de JRadioButton. 
3.6.2 Ejemplo 
Según 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.*; 
public class RadioButtonDemo extends JPanel { 
static JFrame frame; 
static String birdString = "Bird"; 
static String catString = "Cat"; 
static String dogString = "Dog"; 
static String rabbitString = "Rabbit"; 
static String pigString = "Pig"; 
JLabel picture;
<<SWING: JButton, JCheckBox y JRadioButton>> 
26 
public RadioButtonDemo() { 
//creamos los radio buttons 
//el primero seleccionado es el birdButton 
//tambien se usan mnemonicos para acceso por teclado 
JradioButtonbirdButton = new JRadioButton(birdString); 
birdButton.setMnemonic('b'); 
birdButton.setActionCommand(birdString); 
birdButton.setSelected(true); 
JRadioButton catButton = new JRadioButton(catString); 
catButton.setMnemonic('c'); 
catButton.setActionCommand(catString); 
JRadioButton dogButton = new JRadioButton(dogString); 
dogButton.setMnemonic('d'); 
dogButton.setActionCommand(dogString); 
JRadioButton rabbitButton = new JRadioButton(rabbitString); 
rabbitButton.setMnemonic('r'); 
rabbitButton.setActionCommand(rabbitString); 
JRadioButton pigButton = new JRadioButton(pigString); 
pigButton.setMnemonic('p'); 
pigButton.setActionCommand(pigString); 
//creamos un grupo y los anyadimos 
ButtonGroup group = new ButtonGroup(); 
group.add(birdButton); 
group.add(catButton); 
group.add(dogButton); 
group.add(rabbitButton); 
group.add(pigButton); 
//como en los ejemplos anteriores 
RadioListener myListener = new RadioListener();
<<J. Ovejero>> 
27 
birdButton.addActionListener(myListener); 
catButton.addActionListener(myListener); 
dogButton.addActionListener(myListener); 
rabbitButton.addActionListener(myListener); 
pigButton.addActionListener(myListener); 
// utilizamos un objeto Icon como argumento para el constructor 
//de JLabel 
//de inico mostraremos la imagen Bird.gif 
picture = new JLabel(new ImageIcon("images/" 
+ birdString 
+ ".gif")); 
//establecemos la dimension 
picture.setPreferredSize(new Dimension(177,122)); 
//establecemos un panel para la ordenacion de los componentes 
JPanel radioPanel = new JPanel(); 
radioPanel.setLayout(new GridLayout(0, 1)); 
radioPanel.add(birdButton); 
radioPanel.add(catButton); 
radioPanel.add(dogButton); 
radioPanel.add(rabbitButton); 
radioPanel.add(pigButton); 
//con BorderLayout podemos ordenar los componentes en cinco 
//regiones: norte, sur ,este,oeste y centro 
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)); 
} 
//como en la creacion de los botones hicimos
<<SWING: JButton, JCheckBox y JRadioButton>> 
28 
//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")); 
} 
} 
public static void main(String s[]) { 
frame = new JFrame("RadioButtonDemo"); 
frame.addWindowListener(new WindowAdapter() { 
public void windowClosing(WindowEvent e) 
{System.exit(0);} 
}); 
frame.getContentPane().add(new 
RadioButtonDemo(), BorderLayout.CENTER); 
frame.pack(); 
frame.setVisible(true); 
}}
<<J. Ovejero>> 
4. Conclusiones 
La creación de una interfaz grafica en muchos casos puede ser una tarea compleja debido a la 
cantidad de componentes que la componen. 
29 
Toda esa complejidad se puede dividir en la complejidad de crear cada uno de sus 
componentes, como JCheckBox, JButton y JRadioButton, cuyos métodos y constructores 
facilitan la tarea del programador al ser intuitivos y fáciles de utilizar. 
Además la característica fundamental de Java, la multiplataforma, hace de la portabilidad 
un hecho, aunque a veces pagando el precio de looks diferentes en cada plataforma.
<<SWING: JButton, JCheckBox y JRadioButton>> 
30 
5. Bibliografia 
[1] Deitel, Harvey M. y Deitel, Paul J. “Cómo programar en C/C++ y Java” 
[2] http://java.sun.com/ 
-Se describe el API de Java y toda la jerarquía de herencia de Swing 
[3]http://peyote.usal.es/HOTHOUSE/sisinfo/swing.php 
-Contenido sobre Java, con ejemplos sobre botones y ejercicios 
[4]http://www.javahispano.org/canyamo.action 
-Tutoriales sobre Java y Swing. 
[5]http://java.sun.com/docs/books/tutorial/information/download.html 
-Tutorial sobre Swing y JFC 
[6]http://wwwdi.ujaen.es/asignaturas/progav/ 
-Introduccion a las interfaces graficas y gran dedicacion a Swing 
[7]http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/Index.htm 
-Descripciones sobre los mecanismos Swing 
[8]http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/ 
-Introducción y comentarios sobre Swing

Mais conteúdo relacionado

Mais procurados

Cuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWINGCuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWINGsofia_27
 
Programa en emu8086
Programa en emu8086Programa en emu8086
Programa en emu8086Fredy Soncco
 
Maquina de pila abstracta
Maquina de pila abstractaMaquina de pila abstracta
Maquina de pila abstractawilfredo pena
 
Lenguaje de Restricciones de Objeto
Lenguaje de Restricciones de ObjetoLenguaje de Restricciones de Objeto
Lenguaje de Restricciones de ObjetoMauro Torres
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesAlvaro Enrique Ruano
 
The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...Philip Schwarz
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 
Las cuatro p de la gestión de proyectos
Las cuatro p de la gestión de proyectosLas cuatro p de la gestión de proyectos
Las cuatro p de la gestión de proyectosMiguel Gonzalez
 
Tabla comparativa unidad1 benita
Tabla comparativa unidad1 benitaTabla comparativa unidad1 benita
Tabla comparativa unidad1 benitaTAtiizz Villalobos
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de SoftwareJiuseppe Flores
 
Evaluación de rendimientos de sistemas
Evaluación de rendimientos de sistemasEvaluación de rendimientos de sistemas
Evaluación de rendimientos de sistemasAnibalMoreira
 

Mais procurados (20)

Cuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWINGCuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWING
 
Modelo espiral
Modelo espiralModelo espiral
Modelo espiral
 
Programa en emu8086
Programa en emu8086Programa en emu8086
Programa en emu8086
 
Maquina de pila abstracta
Maquina de pila abstractaMaquina de pila abstracta
Maquina de pila abstracta
 
Uml diagrama clase objeto
Uml diagrama clase objetoUml diagrama clase objeto
Uml diagrama clase objeto
 
Lenguaje de Restricciones de Objeto
Lenguaje de Restricciones de ObjetoLenguaje de Restricciones de Objeto
Lenguaje de Restricciones de Objeto
 
Arreglos en Java
Arreglos en JavaArreglos en Java
Arreglos en Java
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...
 
Modelo de requerimientos
Modelo de requerimientosModelo de requerimientos
Modelo de requerimientos
 
Modelo espiral
Modelo espiralModelo espiral
Modelo espiral
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Las cuatro p de la gestión de proyectos
Las cuatro p de la gestión de proyectosLas cuatro p de la gestión de proyectos
Las cuatro p de la gestión de proyectos
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Creando requerimientos eficaces
Creando requerimientos eficacesCreando requerimientos eficaces
Creando requerimientos eficaces
 
Tabla comparativa unidad1 benita
Tabla comparativa unidad1 benitaTabla comparativa unidad1 benita
Tabla comparativa unidad1 benita
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de Software
 
Modelo en-espiral
Modelo en-espiralModelo en-espiral
Modelo en-espiral
 
Gramáticas formales
Gramáticas formales Gramáticas formales
Gramáticas formales
 
Evaluación de rendimientos de sistemas
Evaluación de rendimientos de sistemasEvaluación de rendimientos de sistemas
Evaluación de rendimientos de sistemas
 

Semelhante a JButton, JCheckBox y JRadioButton en Swing

Semelhante a JButton, JCheckBox y JRadioButton en Swing (20)

Controles
ControlesControles
Controles
 
Programacion swing
Programacion swingProgramacion swing
Programacion swing
 
Programacion_II_introduccion_GUI
Programacion_II_introduccion_GUIProgramacion_II_introduccion_GUI
Programacion_II_introduccion_GUI
 
Elementos Swing
Elementos SwingElementos Swing
Elementos Swing
 
Clase swing
Clase swingClase swing
Clase swing
 
Unidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionUnidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacion
 
Programacion.....swing
Programacion.....swingProgramacion.....swing
Programacion.....swing
 
CLASE SWING
CLASE SWING CLASE SWING
CLASE SWING
 
Controles swing
Controles swingControles swing
Controles swing
 
Programacion 5%
Programacion 5%Programacion 5%
Programacion 5%
 
Fundamentos de Visual Basic.
Fundamentos de Visual Basic.  Fundamentos de Visual Basic.
Fundamentos de Visual Basic.
 
Presentacion de dictar clase de gui
Presentacion de dictar clase de guiPresentacion de dictar clase de gui
Presentacion de dictar clase de gui
 
Manual java swing
Manual java swingManual java swing
Manual java swing
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
curso android tema 3
curso android tema 3curso android tema 3
curso android tema 3
 
Introduccion a graficos mediante JAVA 2D
Introduccion a graficos mediante JAVA 2DIntroduccion a graficos mediante JAVA 2D
Introduccion a graficos mediante JAVA 2D
 
Trabajo de patricia
Trabajo de patriciaTrabajo de patricia
Trabajo de patricia
 
Toolkit lego para labview
Toolkit lego para labviewToolkit lego para labview
Toolkit lego para labview
 

Último

CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOEveliaHernandez8
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfssuser50d1252
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAELIASPELAEZSARMIENTO1
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdfRAMON EUSTAQUIO CARO BAYONA
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxMaritza438836
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 

Último (20)

CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 

JButton, JCheckBox y JRadioButton en Swing

  • 1. SWING: JButton, JCheckBox y JRadioButton Javier Ovejero Sánchez Departamento de Informática y Automática Universidad de Salamanca
  • 2.
  • 3. 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 también 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 día; estos son los botones, los checkboxes y los botones de radio, pero también se hará un repaso sobre la evolución en la creación de estos y otros componentes y las ventajas que ha supuesto. i
  • 4. 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
  • 5. iii Tabla de Contenidos 1. Introducción (pg.1) 2.Programación de GUIs en Java (pg.1) 2.1.Introducción (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.Introducción (pg.14) 3.2.Herencia (pg.14) 3.3.Eventos (pg.14) 3.4.JButton (pg.16) 3.4.1.Métodos y constructores (pg.16) 3.4.2.Ejemplo (pg.18) 3.5.JCheckBox (pg.20) 3.5.1.Métodos y constructores (pg.21) 3.5.2.Ejemplo (pg.21) 3.6.JRadioButton (pg.24) 3.6.1.Métodos y constructores (pg.24) 3.7.2.Ejemplo (pg.25) 5.Conclusiones (pg.29) 4.Bibliografia (pg.30)
  • 6.
  • 7. - 1 - 1. Introducción 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 interacción entre el usuario y los servicios que ofrece el sistema operativo, utilizando para ello una representación 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 interpretación 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 generalización de los entornos gráficos a partir de los 80, disponemos actualmente de lenguajes de programación muy potentes y que facilitan la tarea de los desarrolladores, no solo con la lógica del programa sino también con las GUIs. La estructura de un GUI es de forma natural orientada a objetos y su programación orientada a eventos. Es decir, se trabaja con objetos pero el flujo del programa no es secuencial respecto al código, sino que se corresponde con los eventos que suceden al interactuar el usuario con la interfaz. Por ejemplo, al pulsar un botón. 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 programación 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 características más destacadas de cada clase se describen sus métodos mas importantes y constructores, seguidos por unos ejemplos. 2. Programación de GUIs en Java 2.1. Introducción La programación en un GUI determinado requiere el uso de un toolkit (o SDK) para ese GUI, en el lenguaje de programación que queramos utilizar. Existe siempre un toolkit “oficial” que proporciona el fabricante del GUI, normalmente para C o C++. Por ejemplo MFC para programación en Windows. También 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 diseño de su toolkit para programación de GUIs se hizo pensando en que las aplicaciones tuvieran un buen aspecto en cualquier plataforma pero independiente de cualquier GUI específico. Este toolkit se denominó AWT 1.0 (Abstract Window Toolkit):
  • 8. <<SWING: JButton, JCheckBox y JRadioButton>> 2 Fig.1: AWT 1.0 Realmente las aplicaciones AWT 1.0 tenían un aspecto mediocre y un escaso número de elementos. Además su diseño interno era muy deficiente. La situación mejoró algo con AWT 1.1, pero no fue hasta Java 1.2 cuando apareció Swing (Realmente Swing no sustituye a AWT. Swing está construido como una capa sobre AWT, que sigue estando disponible en la biblioteca de clases Java), un toolkit completamente nuevo, con un diseño interno orientado a componentes y un look mucho más satisfactorio:
  • 9. <<J. Ovejero>> 3 Fig.2: Swing A pesar de que Swing tiene un estilo visual propio por defecto, puede también utilizar un aspecto “Motif”, “Windows” o “Apple”; estos últimos sólo en las plataformas correspondientes. Además puede cambiar de aspecto en tiempo de ejecución. Aspecto Swing por defecto: Fig.3: Swing por defecto
  • 10. <<SWING: JButton, JCheckBox y JRadioButton>> 4 Aspecto Motif: Fig.4: Swing Motif Aspecto Windows: Fig.5: Swing Windows
  • 11. <<J. Ovejero>> 2.2. AWT (Abstract Windowing Toolkit) Las JFC (Java Foundation Classes) son parte de la API de Java, compuesto por clases que sirven para crear interfaces gráficas visuales para las aplicaciones y applets de Java. JFC fue presentado por primera vez en la conferencia de desarrolladores JavaOneSM de 1997. Tanto AWT como Swing, son paquetes gráficos contenidos en las JFC. 5 AWT es por tanto un conjunto de herramientas GUI diseñadas para trabajar con múltiples plataformas. Este paquete viene incluido en la API de Java como java.awt ya desde su primera versión, con lo que las interfaces generadas con esta biblioteca funcionan en todos los entornos Java disponibles. También funcionan en navegadores que soporten Java lo que les hace especialmente eficientes para la creación de applets. En la siguiente figura podemos observar las principales clases de AWT: Fig.6: Principales clases AWT 2.3. Swing El paquete Swing es el nuevo paquete grafico que ha aparecido en la versión 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 función de una biblioteca de clases. En la versión 1.0 de Swing, que corresponde a la distribuida en la versión 1.2 del API de Java se incluyen tres bibliotecas de aspecto y comportamiento para Swing:
  • 12. <<SWING: JButton, JCheckBox y JRadioButton>> 6 metal.jar: Aspecto y comportamiento independiente de la plataforma. motif.jar: Basado en la interfaz Sun Motif. windows.jar: Muy similar a las interfaces Microsoft Windows 95. 2.3.1 Diferencias entre Swing y AWT Los componentes Swing, están escritos, se manipulan y se despliegan completamente en Java (ofrecen mayor portabilidad y flexibilidad). Por ello se les llama componentes puros de Java. Como están completamente escritos en Java y no les afectan las complejas herramientas GUI de la plataforma en la que se utilizan, también se les conoce comúnmente como componentes ligeros. De hecho de las principales diferencias entre los componentes de java.awt y de javax.swing es que los primeros están enlazados directamente a las herramientas de la interfaz grafica de usuario de la plataforma local. Por lo tanto, un programa en Java que se ejecuta en distintas plataformas Java tiene una apariencia distinta e incluso, algunas veces hasta la iteraciones del usuario son distintas en cada plataforma (a la apariencia y a la forma en que el usuario interactúa con el programa se les conoce como la “apariencia visual del programa”). Sin embargo los componentes Swing permiten al programador especificar una apariencia visual distinta para cada plataforma, una apariencia visual uniforme entre todas las plataformas, o incluso puede cambiar la apariencia visual mientras el programa se ejecuta. A los componentes AWT que se enlazan a la plataforma local se les conoce como componentes pesados (dependen del sistema de ventanas de la plataforma local para determinar su funcionalidad y su apariencia visual). Cada componente pesado tiene un componente asociado (del paquete java.awt.peer), el cual es responsable de las interacciones entre el componente pesado y la plataforma local para mostrarlo y manipularlo. Varios componentes Swing siguen siendo pesados. En particular las subclases de java.awt.Window, que muestran ventanas en la pantalla, aun requieren de una interacción directa con el sistema de ventanas local.(En consecuencia, los componentes pesados de Swing son menos flexibles) Otras ventajas de Swing respecto a AWT son: -Amplia variedad de componentes: En general las clases que comiencen por "J" son componentes que se pueden añadir a la aplicación. Por ejemplo: JButton. -Aspecto modificable (look and feel): Se puede personalizar el aspecto de las interfaces o utilizar varios aspectos que existen por defecto (Metal Max, Basic Motif, Window Win32). -Arquitectura Modelo-Vista-Controlador: Esta arquitectura da lugar a todo un enfoque de desarrollo muy arraigado en los entornos gráficos de usuario realizados con técnicas orientadas a objetos. Cada componente tiene asociado una clase de modelo de datos y una interfaz que utiliza. Se puede crear un modelo de datos personalizado para cada componente, con sólo heredar de la clase Model. -Gestión mejorada de la entrada del usuario: Se pueden gestionar combinaciones de teclas en un objeto KeyStroke y registrarlo como componente. El evento se activará cuando se pulse dicha combinación si está siendo utilizado el componente, la ventana en que se encuentra, o algún hijo del componente.
  • 13. <<J. Ovejero>> 7 -Objetos de acción (action objects): Estos objetos cuando están 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 gráfico se puede anidar en una lista. -Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de múltiples documentos" mediante las clases JDesktopPane y JInternalFrame. -Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes. Además el usuario puede crear tipos de bordes personalizados. -Diálogos personalizados: Se pueden crear multitud de formas de mensajes y opciones de diálogo con el usuario, mediante la clase JOptionPane. -Clases para diálogos 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: Además de campos y áreas de texto, se presentan campos de sintaxis oculta JPassword, y texto con múltiples fuentes JTextPane. Además 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 relación de más abajo muestra una jerarquía de herencia de las clases que definen los atributos y comportamientos comunes para la mayoría 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 características, 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 mnemónicos) para acceder directamente a los componentes GUI a través 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 propósito de un componente GUI (que se conocen como cuadros de información de herramientas) que aparecen cuando el cursor del ratón se posiciona sobre el componente durante un periodo de tiempo corto. -Soporte para tecnologías de asistencia tales como lectores de pantalla braille para personas ciegas. -Soporte para localización de la interfaz de usuario; es decir, para personalizar la interfaz de usuario de manera que aparezca en distintos lenguajes y convenciones culturales.
  • 14. <<SWING: JButton, JCheckBox y JRadioButton>> 8 2.3.3 Componentes de Swing Contenedores básicos: -JFrame: Representa una ventana básica, capaz de contener otros componentes. Casi todas las aplicaciones construyen al menos un Jframe. Fig.7: JFrame -JDialog, JOptionPane, etc: Los cuadros de diálogo son JFrame restringidos, dependientes de un JFrame principal. Los JOptionPane son cuadros de diálogo sencillos predefinidos para pedir confirmación, realizar advertencias o notificar errores. Los JDialog son cuadros de diálogo generales, normalmente utilizados para peticiones de datos. Fig.8: JDialog -JInternalFrame: Consiste simplemente en una ventana hija, que no puede salir de los límites marcados por la ventana principal. Es muy común en aplicaciones que permiten tener varios documentos abiertos simultáneamente. Fig.9: JInternalFrame
  • 15. <<J. Ovejero>> 9 -JPanel: Un panel sirve para agrupar y organizar otros componentes. Puede estar decorado mediante un borde y una etiqueta. Fig.10: JPanel -JScrollPane: Es un panel que permite visualizar un componente de un tamaño mayor que el disponible, mediante el uso de barras de desplazamiento. 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 pestañas, que pueden contener otros componentes. El usuario puede seleccionar la hoja que desea ver mediante las pestañas. Fig.13: JTabbedPane 1
  • 16. <<SWING: JButton, JCheckBox y JRadioButton>> -JToolBar: Es un contenedor que permite agrupar otros componentes, normalmente botones con iconos en una fila o columna. Las barras de herramientas tienen la particularidad de que el usuario puede situarlas en distintas configuraciones sobre el frame principal. 10 Fig.14: JToolBar 1 Controles básicos: -JButton, JCheckBox, JRadioButton: Distintos tipos de botones. Un check box sirve para marcar una opción. Un radio button permite seleccionar una opción entre varias disponibles. Fig.15: JButton, JCheckBox, JRadioButton -JComboBox: Las combo boxes o listas desplegables que permiten seleccionar un opción entre varias posibles. Fig.16: JComboBox -JList: Listas que permiten seleccionar uno o más elementos. Fig.17: JList
  • 17. <<J. Ovejero>> 11 -JTextField, JFormattedTextField, JpasswordField: Distintos tipos de editores. JFormattedTextField permite indicar el conjunto de caracteres legales que pueden introducirse. JPasswordField no muestra el contenido. Fig.18: JTextField -JSlider: Un slider permiten introducir un valor numérico entre un máximo y un mínimo de manera rápida. Fig.19: JSlider -JSpinner: Permiten seleccionar un valor entre un rango de opciones posibles, al igual que las listas desplegables, aunque no muestran tal lista. Los valores cambian al pulsar los botones de desplazamiento. También se puede introducir un valor directamente. Fig.20: JSpinner -Menús desplegables. Existen dos tipos de menús: JMenuBar, que consiste en una barra de menús desplegables en la parte superior de la aplicación, y JPopupMenu, un menú que se obtiene al pulsar con el botón derecho del ratón sobre una zona determinada. Los menús están compuestos por distintos ítems: JSeparator (una línea de separación entre opciones), JMenuItem (una opción ordinaria), JMenu (un submenu), JCheckboxMenuItem (un opción en forma de check box) o finalmente JradioButtonMenuItem (una opción en forma de radio button). Fig.21: Menus
  • 18. <<SWING: JButton, JCheckBox y JRadioButton>> 12 Controles especializados: -JColorChooser: Consiste en un selector de colores. Fig.22: JColorChooser -JFileChooser: Permite abrir un cuadro de diálogo para pedir un nombre de fichero. Fig.23: JFileChooser -JTree: Su función es mostrar información de tipo jerárquico. Fig.24: JTree
  • 19. <<J. Ovejero>> 13 Controles básicos no interactivos: -JLabel: Permite situar un texto, un texto con una imagen o una imagen únicamente en la ventana. No son interactivos y puede utilizarse código HTML para escribir texto en varias líneas y con varios atributos. 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 posición 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
  • 20. <<SWING: JButton, JCheckBox y JRadioButton>> 14 3. JButton, JCheckBox, JRadioButton 3.1. Introducción Ahora vamos a profundizar en uno de los controles básicos de Swing: los botones. Los botones son una de las piezas claves en la mayoría de interfaces graficas de usuario ya que permiten al usuario, por ejemplo, tanto elegir entre varias opciones (radio buttons), seleccionar las características que quiere que tenga su ventana da aplicación (check boxes), o simplemente trasladar al software su deseo de realizar una determinada acción. Por eso además de saber de donde provienen las clases JRadioButton, JCheckBox y JButton, es necesario que hagamos un breve estudio sobre la gestión de eventos, para comprender que además de situar y crear correctamente nuestro botón, hay que indicarle lo que queremos que haga cuando se realiza una acción determinada sobre el. 3.2. Herencia La siguiente relación 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 están controladas por eventos (generan eventos cuando el usuario interactúa con la GUI). Siempre que ocurre una interacción con el usuario se envía un evento al programa. La información 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. También se han agregado tipos de eventos adicionales, específicos 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 más de las interfaces que escuchan eventos correspondientes a los paquetes java.awt.event y javax.swing.event). -Implementar un manejador de eventos (método que se invoca automáticamente en respuesta a un tipo específico de evento).
  • 21. <<J. Ovejero>> 15 Cualquier clase que implemente a una interfaz deberá definir todos los métodos de esa interfaz; en caso contrario, será una clase abstract y no podría utilizarse para crear objetos. Al uso de componentes que escuchan eventos en el manejo de eventos se conoce como “modelo de delegación de eventos”; el procesamiento de un evento se delega a un objeto específico 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 método manejador de eventos apropiado de cada componente de escucha. Existen ciertos event listeners que son comunes a todos los componentes. Los que vienen a continuación (se usan en lso ejemplos) son producidos específicamente por los componentes JRadioButton, JCheckBox y JButton: -ActionListener: captura cierto tipo de acción realizada sobre ciertos componentes. Por ejemplo, pulsar un botón, seleccionar un elemento en una lista desplegable o una opción 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 operación a implementar: void actionPerformed (ActionEvent e) Existen dos formas básicas de implementación de nuestro event listener: -Utilizar la clase principal frame, frame interior o cuadro de diálogo como receptor de los eventos de los subcomponentes. Para ello basta con hacer que implemente la correspondiente interfaz. Esta opción es simple y eficiente, sin embargo, puede darse el caso de que las operaciones implementadas de la interfaz reciban eventos de varios componentes. Además la clase no va a poder redefinir un adaptador (para las interfaces con más de una operación como WindowListener, la librería proporciona una clase adaptadora (WindowAdapter) que implementa la interfaz mediante implementaciones vacías por defecto, de forma que podamos heredar y redefinir la operación que nos interesa en lugar de tener que implementar toda la interfaz), al heredar ya de una clase previamente. -Construir una pequeña clase interior que implemente la interfaz. Esta opción es más flexible y permite definir directamente un procesamiento único para cada evento/componente que lo genera. Sin embargo la definición de nuevas clases y la creación de objetos interiores la hacen menos eficiente (Es la opción que utilizaremos en los ejemplos). Una vez implementado el listener, indicaremos al componente que lo utilice para notificar sus eventos mediante: componente.addxxxxListener (objetoListener) donde xxxx será el identificador del tipo de listener. Un componente puede ser conectado a varios listeners del mismo o distintos eventos. De la misma forma, un listener puede ser conectado a varios componentes al mismo tiempo. En estos casos para determinar dentro del listener cuál es el componente que ha enviado el evento
  • 22. <<SWING: JButton, JCheckBox y JRadioButton>> podemos utilizar la operación getSource() del evento recibido. Esta situación es muy frecuente cuando la clase principal hace de listener de los subcomponentes. 3.4. JButton Un botón es un componente en el que el usuario hace clic para desencadenar una acción especifica (genera un evento ActionEvent). Al texto en la cara de un objeto JButton se le llama etiqueta del botón. Tener mas de un objeto JButton con la misma etiqueta hace que los objetos JButton sean ambiguos para el usuario (cada etiqueta de botón debe ser única). Un objeto JButton puede mostrar objetos Icon, esto proporciona un nivel adicional de interactividad visual. También puede tener un objeto de sustitución, que es un objeto Icon que aparece cuando el ratón se posiciona sobre el botón; el icono en el botón cambia a medida que el ratón se aleja y se acerca al área del botón en la pantalla. 3.4.1 Métodos y constructores Ahora que sabemos como es visualmente cada uno de los componentes (visto en el punto 2.3.3), hay que destacar los métodos y constructores más relevantes que nos permitirán configurar los componentes según nuestras necesidades. 16 -Contenido del botón Método o Constructor Propósito JButton(String, Icon) JButton(String) JButton(Icon) JButton() Crea un ejemplar de JButton, lo inicializa para tener el texto/imagen especificado. void setText(String) String getText() Selecciona u obtiene el texto mostrado en el botón. void setIcon(Icon) Icon getIcon() Selecciona u obtiene la imagen mostrada por el botón cuando no está seleccionado o pulsado. void setDisabledIcon(Icon) Icon getDisabledIcon() Selecciona u obtiene la imagen mostrada por el botón cuando está desactivado. Si no se especifica una imagen, el aspecto y comportamiento crea una por defecto. void setPressedIcon(Icon) Icon getPressedIcon() Selección u obtiene la imagen mostrada por el botón cuando está pulsado. void setSelectedIcon(Icon) Icon getSelectedIcon() void setDisabledSelectedIcon(Icon) Icon getDisabledSelectedIcon() Selecciona u obtiene la imagen mostrada por el botón cuando está seleccionado. Si no se especifica una imagen de botón desactivado seleccionado, el aspecto y comportamiento crea una manipulando la imagen de seleccionado.
  • 23. <<J. Ovejero>> setRolloverEnabled(boolean) boolean getRolloverEnabled() void setRolloverIcon(Icon) Icon getRolloverIcon() void setRolloverSelectedIcon(Icon) Icon getRolloverSelectedIcon() 17 Utiliza setRolloverEnabled(true) y setRolloverIcon(someIcon) para hacer que el botón muestre el icono especificado cuando el cursor pasa sobre él. -Ajustes sobre la apariencia del botón Método o constructor Propósito void setHorizontalAlignment(int) void setVerticalAlignment(int) int getHorizontalAlignment() int getVerticalAlignment() Selecciona u obtiene dónde debe situarse el contenido del botón. 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 setHorizontalTextPosition(int) void setVerticalTextPosition(int) int getHorizontalTextPosition() int getVerticalTextPosition() Selecciona u obtiene dónde debería situarse el texto del botón con respecto a la imagen. 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() Selecciona u obtiene el número de píxeles entre el borde del botón y sus contenidos. void setFocusPainted(boolean) boolean isFocusPainted() Selecciona u obtiene si el botón debería parecer diferente si obtiene el foco. void setBorderPainted(boolean) boolean isBorderPainted() Selecciona u obtiene si el borde del botón debería dibujarse.
  • 24. <<SWING: JButton, JCheckBox y JRadioButton>> 18 -Funcionalidad del boton Método o Constructor Propósito void setMnemonic(char) char getMnemonic() Selecciona la tecla alternativa para pulsar el botón. void setActionCommand(String) String getActionCommand(void) Selecciona u obtiene el nombre de la acción realizada por el botón. Void addActionListener(ActionListener) ActionListener removeActionListener() Añade o elimina un objeto que escucha eventos action disparados por el botón. void addItemListener(ItemListener) ItemListener removeItemListener() Añade o elimina un objeto que escucha eventos items disparados por el botón. void setSelected(boolean) boolean isSelected() Selecciona u obtiene si el botón está seleccionado. Tiene sentido sólo en botones que tienen un estado on/off, como los checkbox. void doClick() void doClick(int) Realiza un "click". El argumento opcional especifica el tiempo (en milisegundos) que el botón debería estar pulsado. 3.4.2 Ejemplo En este ejemplo igual que en los demás se va a crear una pequeña aplicación que nos muestre una iniciación 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" );
  • 25. <<J. Ovejero>> 19 //agregamos el boton al panel de contenido c.add( botonSimple ); //creamos dos objetos ImageIcon que representan al //objeto Icon predeterminado y al objeto Icon de //sustitucion para el botonElegante. //los gif se presupone que estan en el mismo //directorio que la aplicación que las utiliza Icon icono1 = new ImageIcon( "icono1.gif" ); Icon icono2 = new ImageIcon( "icono2.gif" ); //crea el boton con el gif y el texto (texto a la //derecha del icono como predeterminado) botonElegante = new JButton("Boton elegante",icono1); //se utiliza el metodo setRollOverIcon heredado de //AbstractButton para especificar la imagen que //aparece cuando el raton se posiciona sobre el boton botonElegante.setRolloverIcon( icono2 ); //agregamos el boton al panel de contenido c.add( botonElegante ); // crea una instancia de la clase interna //anejadorBoton para usarla en el manejo de eventos //de botón ManejadorBoton manejador = new ManejadorBoton(); botonElegante.addActionListener( manejador ); botonSimple.addActionListener( manejador ); setSize( 300, 100 ); show(); } // fin del constructor de PruebaBoton
  • 26. <<SWING: JButton, JCheckBox y JRadioButton>> 20 public static void main( String args[] ) { PruebaBoton ap = new PruebaBoton(); ap.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } // fin del método windowClosing } // fin de la clase interna anónima ); // fin de addWindowListener } // fin de main // clase interna para el manejo de eventos de botón private class ManejadorBoton implements ActionListener { public void actionPerformed( ActionEvent e ) { //mostramos un cuadro de dialogo de mensaje que contiene la //etiqueta del boton que se pulso JOptionPane.showMessageDialog( null, "Usted oprimio:" + e.getActionCommand() ); } } } 3.5. JCheckBox La versión Swing soporta botones checkbox con la clase JCheckBox. Swing también soporta checkboxes en menús, utilizando la clase JCheckBoxMenuItem. Como JcheckBoxMenuItem y JcheckBox descienden de AbstractButton, los checkboxes de Swing tienen todas las características de un botón normal. Los checkboxes son similares a los botones de radio, pero su modelo de selección: ninguno, alguno o todos, pueden ser seleccionados. Sin embargo en un grupo de botones de radio, solo puede haber uno seleccionado. Los métodos de AbstractButton que son mas utilizados son setMnemonic, addItemListener, setSelected y isSelected.
  • 27. <<J. Ovejero>> 3.5.1 Metodos y constructores 21 Constructor Propósito JCheckBox(String) JCheckBox(String,boolean) JCheckBox(Icon) JCheckBox(Icon,boolean) JCheckBox(String,Icon) JCheckBox(String,Icon,boolean) JCheckBox() Crea un ejemplar de JCheckBox. El argumento string específica el texto, si existe, que el checkbox debería mostrar. De forma similar, el argumento Icon específica la imagen que debería 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. JCheckBoxMenuItem(String) JCheckBoxMenuItem(String,boolean) JCheckBoxMenuItem(Icon) JCheckBoxMenuItem(String,Icon) JCheckBoxMenuItem(String,Icon, boolean) JCheckBoxMenuItem() 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.*; public class PruebaCasillaVerificacion extends JFrame { private JTextField t; private JCheckBox negrita, cursiva; public PruebaCasillaVerificacion() { super( "Prueba de JCheckBox" ); Container c = getContentPane(); c.setLayout(new FlowLayout());
  • 28. <<SWING: JButton, JCheckBox y JRadioButton>> //creamos e inicializamos el objeto JTextField t = new JTextField( "Texto que cambia", 28 ); //establecemos el estilo de la fuente y añadimos al panel t.setFont( new Font( "TimesRoman",Font.PLAIN, 14 ) ); c.add( t ); // crea los objetos casilla de verificación negrita = new JCheckBox( "Negrita" ); c.add( negrita ); cursiva = new JCheckBox( "Cursiva" ); c.add( cursiva ); //si se hace click en un objeto JCheckBox se genera un //ItemEvent que puede ser manejado por un ItemListener //(cualquier objeto de una clase que implemente la interfaz //ItemListener) //un objeto ItemListener debe definir el metodo //itemStateChanged ManejadorCasillaVerificacionmanejador = new ManejadorCasillaVerificacion(); negrita.addItemListener( manejador ); cursiva.addItemListener( manejador ); 22 addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } // fin del método windowClosing } // fin de la clase interna anónima ); // fin de addWindowListener setSize( 325, 100 ); show(); } // fin del constructor de PruebaCasillaVerificacion
  • 29. <<J. Ovejero>> public static void main( String args[] ) 23 { new PruebaCasillaVerificacion(); } private class ManejadorCasillaVerificacion implements ItemListener { private int valNegrita = Font.PLAIN; private int valCursiva = Font.PLAIN; //con e.getSource() determinamos el onjeto sobre el que se hizo //click //con las estructuras if-else se determina cual fue modificado y //la accion que tenemos que llevar a cabo public void itemStateChanged( ItemEvent e ) { if ( e.getSource() == negrita ) if ( e.getStateChange() == ItemEvent.SELECTED ) valNegrita = Font.BOLD; else valNegrita = Font.PLAIN; if ( e.getSource() == cursiva ) if ( e.getStateChange() == ItemEvent.SELECTED ) valCursiva = Font.ITALIC; else valCursiva = Font.PLAIN; //establecemos los tipos de la nueva fuente t.setFont( new Font( "TimesRoman", valNegrita + valCursiva, 14 ) ); //repintamos el texto t.repaint(); } // fin del método itemStateChanged } // fin de la clase interna //ManejadorCasillaVerificacion } // fin de la clase PruebaCasillaVerificacion
  • 30. <<SWING: JButton, JCheckBox y JRadioButton>> 3.6. JRadioButton Los Botones de Radio son grupos de botones en los que, por convención, sólo uno de ellos puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y ButtonGroup. Para poner un botón 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 caracterísitcas de los botones normales.Los métodos de AbstractButton que más se utilizan son setMnemonic, addItemListener, setSelected, y isSelected. Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y añadirle cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la selección anterior cuando el usuario selecciona otro botón del grupo. Generalmente se debería 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 selección inicial. Una vez que el usuario hace una selección, no existe forma para desactivar todos los botones de nuevo. Cada vez que el usuario pulsa un botón de radio, (incluso si ya estaba seleccionado), el botón dispara un evento action. También ocurren uno o dos eventos ítem: uno desde el botón que acaba de ser seleccionado, y otro desde el botón que ha perdido la selección (si existía). Normalmente, las pulsaciones de los botones de radio se manejan utilizando un oyente de action. 24 3.6.1 Metodos y constructores -ButtonGroups Método Propósito ButtonGroup() Crea un ejemplar de ButtonGroup. void add(AbstractButton) void remove(AbstractButton) Añade un botón a un grupo, o elimina un botón de un grupo
  • 31. <<J. Ovejero>> 25 -RadioButton Constructor Propósito JRadioButton(String) JRadioButton(String,boolean) JRadioButton(Icon) JRadioButton(Icon, boolean) JRadioButton(String, Icon) JRadioButton(String, Icon, boolean) JRadioButton() Crea un ejemplar de JRadioButton. El argumento string especifica el texto, si existe, que debe mostrar el botón de radio. Similarmente, el argumento, Icon especifica la imagen que debe usar en vez la imagen por defecto de un botón de radio para el aspecto y comportamiento. Si se especifica true en el argumento booleano, inicializa el botón de radio como seleccionado, sujeto a la aprovación del objeto ButtonGroup. Si el argumento booleano esta ausente o es false, el botón de radio está inicialmente deseleccionado. JRadioButtonMenuItem(String) JRadioButtonMenuItem(Icon) JRadioButtonMenuItem(String, Icon) JRadioButtonMenuItem() Crea un ejemplar de JRadioButtonMenuItem. Los argumentos se interpretan de la misma forma que los de los constructores de JRadioButton. 3.6.2 Ejemplo Según 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.*; public class RadioButtonDemo extends JPanel { static JFrame frame; static String birdString = "Bird"; static String catString = "Cat"; static String dogString = "Dog"; static String rabbitString = "Rabbit"; static String pigString = "Pig"; JLabel picture;
  • 32. <<SWING: JButton, JCheckBox y JRadioButton>> 26 public RadioButtonDemo() { //creamos los radio buttons //el primero seleccionado es el birdButton //tambien se usan mnemonicos para acceso por teclado JradioButtonbirdButton = new JRadioButton(birdString); birdButton.setMnemonic('b'); birdButton.setActionCommand(birdString); birdButton.setSelected(true); JRadioButton catButton = new JRadioButton(catString); catButton.setMnemonic('c'); catButton.setActionCommand(catString); JRadioButton dogButton = new JRadioButton(dogString); dogButton.setMnemonic('d'); dogButton.setActionCommand(dogString); JRadioButton rabbitButton = new JRadioButton(rabbitString); rabbitButton.setMnemonic('r'); rabbitButton.setActionCommand(rabbitString); JRadioButton pigButton = new JRadioButton(pigString); pigButton.setMnemonic('p'); pigButton.setActionCommand(pigString); //creamos un grupo y los anyadimos ButtonGroup group = new ButtonGroup(); group.add(birdButton); group.add(catButton); group.add(dogButton); group.add(rabbitButton); group.add(pigButton); //como en los ejemplos anteriores RadioListener myListener = new RadioListener();
  • 33. <<J. Ovejero>> 27 birdButton.addActionListener(myListener); catButton.addActionListener(myListener); dogButton.addActionListener(myListener); rabbitButton.addActionListener(myListener); pigButton.addActionListener(myListener); // utilizamos un objeto Icon como argumento para el constructor //de JLabel //de inico mostraremos la imagen Bird.gif picture = new JLabel(new ImageIcon("images/" + birdString + ".gif")); //establecemos la dimension picture.setPreferredSize(new Dimension(177,122)); //establecemos un panel para la ordenacion de los componentes JPanel radioPanel = new JPanel(); radioPanel.setLayout(new GridLayout(0, 1)); radioPanel.add(birdButton); radioPanel.add(catButton); radioPanel.add(dogButton); radioPanel.add(rabbitButton); radioPanel.add(pigButton); //con BorderLayout podemos ordenar los componentes en cinco //regiones: norte, sur ,este,oeste y centro 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)); } //como en la creacion de los botones hicimos
  • 34. <<SWING: JButton, JCheckBox y JRadioButton>> 28 //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")); } } public static void main(String s[]) { frame = new JFrame("RadioButtonDemo"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.getContentPane().add(new RadioButtonDemo(), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); }}
  • 35. <<J. Ovejero>> 4. Conclusiones La creación de una interfaz grafica en muchos casos puede ser una tarea compleja debido a la cantidad de componentes que la componen. 29 Toda esa complejidad se puede dividir en la complejidad de crear cada uno de sus componentes, como JCheckBox, JButton y JRadioButton, cuyos métodos y constructores facilitan la tarea del programador al ser intuitivos y fáciles de utilizar. Además la característica fundamental de Java, la multiplataforma, hace de la portabilidad un hecho, aunque a veces pagando el precio de looks diferentes en cada plataforma.
  • 36. <<SWING: JButton, JCheckBox y JRadioButton>> 30 5. Bibliografia [1] Deitel, Harvey M. y Deitel, Paul J. “Cómo programar en C/C++ y Java” [2] http://java.sun.com/ -Se describe el API de Java y toda la jerarquía de herencia de Swing [3]http://peyote.usal.es/HOTHOUSE/sisinfo/swing.php -Contenido sobre Java, con ejemplos sobre botones y ejercicios [4]http://www.javahispano.org/canyamo.action -Tutoriales sobre Java y Swing. [5]http://java.sun.com/docs/books/tutorial/information/download.html -Tutorial sobre Swing y JFC [6]http://wwwdi.ujaen.es/asignaturas/progav/ -Introduccion a las interfaces graficas y gran dedicacion a Swing [7]http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/Index.htm -Descripciones sobre los mecanismos Swing [8]http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/ -Introducción y comentarios sobre Swing