Está en la página 1de 7

Swing: Gua rapida

Manuel Urue na
19 de diciembre de 2002
1. Introduccion
Dado el bajo rendimiento y las limitaciones de la librera AWT
1
de Java, se desarrollo una
segunda librera de interfaces de usuario denominada Swing.
Realmente Swing sigue utilizando AWT para representar sus componentes. Sin embargo, no
es recomendable seguir usando AWT directamente, ni mezclar componentes de ambas libreras,
la practica recomendada es dise nar aplicaciones Swing puras, sin ning un componente graco
2
AWT.
2. Un ejemplo de aplicacion Swing
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloWorldSwing
{
public static void main ( String[] args )
{
JFrame frame = new JFrame("HelloWorldSwing");
final JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Esta es una de las aplicaciones de Swing mas sencillas que se pueden dise nar. Simplemente
crea una ventana con un ttulo y que contiene una frase en su interior.
La mayora del codigo es auto-explicativo, exceptuando quizas las tres ultimas operaciones.
El metodo setDefaultCloseOperation() es un atajo, muy util para la mayora de las apli-
caciones, que indica el comportamiento que debe tener la aplicacion cuando el usuario cierra
la ventana. En este caso cierra la aplicacion
3
.
Por otro lado las dos ultimas operaciones simplemente agrupan los elementos dentro de la
ventana y la hacen visible.
1
Abstract Windows Toolkit
2
Los elementos no gracos, como el modelo de eventos, siguen utilizandose en Swing
3
Si se elimina esta lnea del programa, la ventana no se cerrara nunca
2
3. Contenedores principales en Swing
Toda aplicacion de Swing debe denir alg un tipo de contenedor principal para situar los
elementos gracos de la misma.
A diferencia de AWT, los contenedores principales estan compuestos por m ultiples ele-
mentos. Los mas importantes son la barra de men u (getJMenuBar()) y el panel de contenidos
(getContentPane()). El panel de contenidos es el lugar donde deben situarse todos los ele-
mentos gracos de la aplicacion
4
, a exception de la barra de menu.
Los contenedores principales mas comunes de Swing son:
javax.swing.JFrame - Ventana principal.
javax.swing.JDialog - Ventana secundaria, depende de una principal.
javax.swing.JApplet - Applet en un navegador.
JFrame implementa la tpica ventana de una applicacion GUI, con barra de ttulo, marco
y botones para cerrarla o minimizarla.
JDialog y sus subclases implementan los tpicos dialogos para seleccionar un chero
(JFileChooser) o pedir la conrmacion del usuario (JOptionPane).
4. Elementos basicos
La mayora de los componentes de Swing ya estaban denidos en AWT. Por ejemplo
javax.swing.JButton
5
se puede emplear para reemplazar a un java.awt.Button.
javax.swing.JButton - Botones.
javax.swing.JLabel - Etiquetas con texto.
javax.swing.JTextField - Campos de texto.
javax.swing.JCheckBox - Casillas de seleccion.
4
En AWT se podan a nadir directamente (applet.add(label)) mientras que en Swing es necesario utilizar el
ContentPane de contenedor principal (frame.getContentPane().add(label)).
5
Normalmente todos los componentes visuales de Swing comienzan con J.
3
javax.swing.JComboBox - Campos de selecion.
javax.swing.JRadioButton - Botones de selecion
6
.
javax.swing.JSlider - Barra de seleccion.
javax.swing.JProgressBar - Barra de progreso.
javax.swing.JToolBar - Barra de herramientas.
Swing ha cuidado un poco mas el aspecto visual de las aplicaciones que AWT, ahora es
posible crear la mayora de los elementos tanto con una cadena de texto como con un icono.
Ademas es posible introducir codigo HTML
7
en los elementos de texto, como pueden ser
las etiquetas, de forma que es mas simple utilizar negritas, cursivas o colores.
4.1. Menus
Una de las mejoras de Swing respecto a AWT es la posibilidad de a nadir men us a las
aplicaciones gracas. Como ya se ha visto en un apartado anterior, los contenedores principales
estan formados por varios elementos, entre ellos un objeto de tipo JMenuBar.
javax.swing.JMenuBar - La barra de men u.
javax.swing.JMenu - Un men u.
javax.swing.JMenuItem - Un elemento de men u.
6
Normalmente se utilizan con la clase javax.swing.RadioGroup para indicar que dos botones no pueden
estar seleccionados simultaneamente.
7
JLabel label = new JLabel(<html><b>Negrita</b> y <i>Cursiva</i></html>)
4
javax.swing.JCheckboxMenuItem - Una casilla de seleccion de un men u.
javax.swing.JRadioButtonMenuItem - Un boton de seleccion de un men u.
Los men us se construyen jerarquicamente, los elementos de men u (JMenuItem y subcla-
ses) se a naden a un men u y los men us se a naden, o bien como submen us de otro men u, o
directamente a la barra de men u.
5. Paneles
Al igual que en AWT, los componentes de Swing se pueden agrupar y situar dento de la
aplicacion mediante el uso de paneles. Estos son los tipos de panel mas comunes de Swing:
javax.swing.JPanel - Panel vaco.
javax.swing.JScrollPane - Panel con barras de desplazamiento.
javax.swing.JTabbedPane - Paneles superpuestos con pesta nas.
javax.swing.JSplitPane - Panel dividido en dos secciones.
5.1. Layouts y bordes
Al igual que AWT, en Swing es posible indicar como deben situarse los elementos dentro
de un panel. Para ello se utilizan los LayoutManager denidos en AWT y se dene alguno
mas.
5
Ademas de los Layouts en Swing es posible denir decoraciones para los bordes de los
paneles. Por ejemplo, el siguiente fragmento de codigo congura el panel con un margen de 5
pixels en cada direccion y lo enmarca con un lnea etiquetada.
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Select Phase"),
BorderFactory.createEmptyBorder(5,5,5,5)));
6. Ventanas de dialogo
Uno de los componentes indispensables en los interfaces gracos de hoy en da son las
ventanas de dialogo. Son ventanas secundarias que se emplean para mostrar al usuario un
aviso, hacerle una pregunta o pedirle que seleccione un chero.
Las ventanas de dialogo se denominan secundarias ya que suelen depender de otra ventana
principal, normalmente un JFrame. Es habitual que cuando se muestra una de estas pantallas
de dialogo el programa espera hasta que el cliente responda a dicho dialogo y no responde a
acciones del usuario sobre la ventana principal.
Aunque en Swing todas las ventanas de dialogo son subclases del contenedor principal
javax.swing.Dialog, se suelen utilizar otras clases, como puede ser JOptionPane, que repre-
sentan tipos de cuadros de dialogo bien conocidos en los dise nos GUI.
Por ejemplo un mensaje de aviso al usuario, con un boton para cerrarlo se genera con el
codigo siguiente:
//default title and icon
JOptionPane.showMessageDialog(frame,
"This candidate is a dog. " +
"Invalid vote.");
6
En los cuadros de dialogo con m ultiples opciones, el metodo que lanza la ventana suele de-
volver un valor con la eleccion que ha hecho el usuario. Por ejemplo, al ejecutar el siguiente codi-
go, la variable n tendra uno de los valores: JOptionPane.YES_OPTION, JOptionPane.NO_OPTION,
JOptionPane.CANCEL_OPTION o JOptionPane.CLOSED_OPTION, en funcion de que el usuario
pulse el boton S, No, Cancelar o cierre la ventana.
//default title and icon
Object[] options = {"Yes!",
"No, Ill pass",
"Well, if I must"};
int n = JOptionPane.showOptionDialog(frame,
"Duke is a cartoon mascot. \n"
+ "Do you still want to cast your vote?",
"A Follow-up Question",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[2]);
Ademas de las ventanas de dialogo simples que hemos visto hasta ahora, en Swing estan de-
nidos otros cuadros de dialogo mas sosticados como puede ser javax.swing.JFileChooser
o javax.swing.JColorChooser.
En el caso de javax.swing.JFileChooser, hay dos metodos para mostrar la ventana de
dialogo, JFileChooser.showOpenDialog() y JFileChooser.showSaveDialog() seg un el tipo
de accion que se quiera realizar con el chero seleccionado (JFileChooser.getSelectedFile()).
7

También podría gustarte