6. Creación de una aplicación gráfica con Swing

6.1. Introducción

  • Para poder usar Swing, parece necesario tener la versión 1.8 del JDK (Java Development Kit).
  • En el proyecto, pulsar el paquete con el botón derecho y seleccionar Nuevo -> Otro. Seleccionar JFrame por cada nueva ventana que se quiera añadir.
  • Las ventanas (JFrame) se componen de un menú opcional (JMenuBar) y uno o varios paneles (JPanel).
  • Muchos elementos necesitan que se indique su posición y tamaño. Pueden utilizarse variables de tipo Rectangle para estos casos (ver sección 5.5. Clases).
  • Eclipse dispone de un modo de diseño en el que poder añadir y modificar los elementos sin usar código. Si no aparece automáticamente, botón derecho en el archivo, Abrir con... -> WindowBuilder.

6.2. Menús

  • El tradicional menú principal de la aplicación se añade empezando con la barra que contendrá al menú:
    JMenuBar menuBar = new JMenuBar();
    menuBar.setBackground(Color.WHITE);
    menuBar.setBounds(0, 0, 709, 23);
    setJMenuBar(menuBar);
  • Dentro de la barra, se van añadiendo los diferentes elementos o secciones del menú:
    JMenu mnArchivo = new JMenu("Archivo");
    menuBar.add(mnArchivo);
  • Y dentro de cada sección, los elementos correspondientes:
    JMenuItem itemInicio = new JMenuItem("Texto");
    mnArchivo.add(itemInicio);
  • Para que se ejecute una acción al apretar en el elemento se añade el método addActionListener del elemento deseado y, dentro de él, el método actionPerformed:
    itemInicio.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        ...
        }
    });
  • El código anterior puede englobarse en un bloque try/catch.

6.3. Paneles

  • El contenido del programa se encuentra dentro de los paneles, que pueden estar dentro de un JFrame o por separado, cuando se quiere usar la misma ventana e ir cambiando los paneles según la sección de la aplicación.
  • Cuando se quiere añadir un panel dentro de un frame, se crea un objeto de la clase JPanel, se le da un tamaño y se inserta en el frame:
    panelOutput = new JPanel();
    panelOutput.setBounds(0, 24, width, height);
    setContentPane(panelOutput);
    panelOutput.setLayout(null);
  • También se puede añadir una clase de tipo JPanel en un archivo separado de la misma forma que se crean ventanas (Nuevo -> Otro).
  • Podemos usar el método anterior setContentPane() junto con setLayout para ir cambiando un panel por otro según lo deseemos (desde el archivo que contiene el JFrame) El siguiente código se puede usar con el método de añadir acciones a los elementos de un menú descrito anteriormente:
    setContentPane(panelOutput);
    panelOutput.setLayout(null);
    setTitle(titulo);

6.4. Componentes

  • JTextField: Campo de texto.
  • JLabel: Etiqueta.
  • JButton: Botón.
  • JTextArea: Campo de texto o etiqueta amplios.