miércoles, 23 de julio de 2008

Aplicaciones Java (II): Swing: componentes básicos

En este post vamos a continuar comentando como crear una aplicacion Java con Swing. Concretamente, vamos a mostrar como utilizar varios de los componentes de Swing.

Paneles (JPanel)

Los paneles son los objetos donde colocaremos los componentes que creemos. Son el canvas donde posteriormente pintaremos. Crearemos los paneles normales utilizando la clase JPanel:

JPanel izquierda = new JPanel();
izquierda.add(new JLabel("etiqueta"));

Etiquetas (JLabel)

Probablemente el control más básico es la etiqueta (JLabel). Se trata de un recuadro de texto con el contenido que queramos.

root.add(new JLabel("Hola mundo!"));

Layouts (BorderLayout, BoxLayout, GridLayout)

El punto mas lioso de Swing, especialmente al principio, es la distribucion de los controles en la ventana. Para ello utilizaremos unos objetos llamados layouts. Estos objetos nos permitirán elegir dónde queremos ubicar cada componente.

Hay diferentes tipos de layouts. Algunos de los más básicos son:

BorderLayout

Divide el panel actual en 5 secciones (norte, sur, este, oeste, centro). Intentará dar más espacio a la sección central, con lo que es muy útil cuando tenemos por ejemplo un componente de texto que nos interesa mucho, y una serie de botones que queremos ubicar en la parte de arriba del panel.

root.setLayout(new BorderLayout());
root.add(new JLabel("este"), BorderLayout.EAST);

BoxLayout

Este layout ubicará los componentes uno al lado del otro en un mismo eje, en horizontal o vertical.

JPanel izquierda = new JPanel();
izquierda.setLayout(new BoxLayout(izquierda, BoxLayout.Y_AXIS));

izquierda.add(new JLabel("arriba"));
izquierda.add(new JLabel("centro"));
izquierda.add(new JLabel("abajo"));

GridLayout

Este layout divide la superficie en n·m celdas de igual tamaño.

JPanel gridpanel = new JPanel(new GridLayout(2, 2));
root.add(gridpanel, BorderLayout.SOUTH);
  
gridpanel.add(new JLabel("arriba izquierda"));
gridpanel.add(new JLabel("arriba derecha"));
gridpanel.add(new JLabel("abajo izquierda"));
gridpanel.add(new JLabel("abajo derecha"));

Otros layouts

Hay muchos otros layouts que nos permitirán distribuir de maneras más flexibles nuestros componentes. Se pueden consultar en la ayuda de Java al respecto.

Paneles con pestañas (JTabbedPane)

Un tipo especial de panel nos permitirá agregar varios paneles en el mismo espacio físico, que seleccionaremos por medio de pestañas (tabs).

JTabbedPane tabbedPane = new JTabbedPane();
root.add(tabbedPane, BorderLayout.CENTER);

JPanel tab1 = new JPanel(new BorderLayout());
tabbedPane.addTab("tab 1", tab1);

JPanel tab2 = new JPanel(new BorderLayout());
tabbedPane.addTab("tab 2", tab2);

Campos de texto (JTextArea) y scrolling (JScrollPane)

Utilizaremos el componente JTextArea para permitir al usuario introducir y modificar texto.

JTextArea text1 = new JTextArea(20, 30);
tab1.add(text1);
text1.append("Escribimos algo de texto\nQue aparecerá por defecto.");

Si además añadimos un objeto del tipo JScrollPane, cuando haya más texto que el espacio disponible aparecerá automáticamente una barra de desplazamiento.

JTextArea text2 = new JTextArea(20, 30);
tab2.add(new JScrollPane(text2));
text2.append("Este campo de texto estará oculto en la segunda pestaña, " +
      "y tendrá una barra de scroll.");

Fillers (Filler)

Éste es un componente puramente estético, que sirve para dejar espacio entre dos componentes.

tab3.add(new Filler(new Dimension(10, 10), new Dimension(10, 10), new Dimension(10, 10)));

Selección de un valor en una lista (JComboBox)

Para seleccionar un valor entre una lista predefinida, utilizaremos un componente de tipo JComboBox:

String[] colores = {"azul", "blanco", "rojo", "negro"};
root.add(new JComboBox(colores), BorderLayout.NORTH);

Material

El código fuente mostrando el uso de estos componentes se puede descargar bajo licencia GPLv3:
Download

Y gracias a las tecnologías Java Web Start y Applets comentadas en el artículo anterior, este ejemplo se puede ejecutar directamente sin instalar nada, sólamente pulsando uno de los siguientes botones:
Start Applet Launch via Java Web Start

No hay comentarios: