Codemaker Interfaces

Interfaces Tema 1

Tu primera ventana

Hasta ahora, tus programas funcionaban en la consola: el programa pregunta, el usuario contesta, y el programa sigue. Con una interfaz gráfica, las cosas cambian:

Programa de consolaPrograma con ventanas
¿Quién manda?El programa: pregunta cuando quiere y espera la respuestaEl usuario: pulsa lo que quiere, cuando quiere
¿Cómo se lee lo que hace el usuario?Con ScannerCon eventos: el programa reacciona a cada clic (lo verás en el tema de eventos)
¿Qué ve el usuario?TextoVentanas con botones, casillas, listas…

En Java, las ventanas se hacen con Swing, una librería que viene incluida en el propio Java.

Las piezas de una ventana#

Una ventana se construye metiendo unas cajas dentro de otras:

Anatomía de una ventana: el JFrame contiene el panel de contenido, que contiene un JPanel, que contiene los componentes

PiezaQué es
JFrameLa ventana en sí: el marco, con su título y los botones de minimizar y cerrar
JPanelUn contenedor: sirve para agrupar componentes y decidir cómo se colocan
ComponentesLo que el usuario ve y toca: textos (JLabel), botones (JButton), campos de texto (JTextField)…

Todas las piezas de Swing empiezan por J: así se distinguen de las de una librería más antigua de Java que se llamaban igual.

El programa#

import javax.swing.*;
import com.formdev.flatlaf.FlatLightLaf;

public class PrimeraVentana {
    public static void main(String[] args) {
        FlatLightLaf.setup();

        SwingUtilities.invokeLater(() -> {
            JFrame ventana = new JFrame("Mi primera ventana");
            ventana.setSize(400, 250);
            ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ventana.setLocationRelativeTo(null);

            JLabel saludo = new JLabel("¡Hola, Swing!", SwingConstants.CENTER);
            ventana.add(saludo);

            ventana.setVisible(true);
        });
    }
}

Al ejecutarlo, aparece esto:

La primera ventana: un marco con el título «Mi primera ventana» y el texto «¡Hola, Swing!» en el centro

Línea a línea:

LíneaQué hace
import javax.swing.*;Trae todas las piezas de Swing (JFrame, JLabel…)
FlatLightLaf.setup();Le da a la ventana un aspecto moderno. Lo verás en el tema de FlatLaf; de momento, pon siempre esta línea la primera
SwingUtilities.invokeLater(() -> { … });Swing tiene su propio «hilo» para dibujar las ventanas, y las ventanas hay que crearlas ahí. Cópialo tal cual: todo lo de la ventana va dentro de las llaves
new JFrame("Mi primera ventana")Crea la ventana, con su título
setSize(400, 250)Le da un tamaño: 400 píxeles de ancho y 250 de alto
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)Que el programa termine al cerrar la ventana. Sin esto, la ventana se cierra pero el programa sigue funcionando por detrás
setLocationRelativeTo(null)Que salga centrada en la pantalla
ventana.add(saludo)Mete el texto en la ventana
setVisible(true)La muestra. Siempre al final, cuando ya está todo dentro

Nota

En el resto de estos apuntes, los ejemplos están escritos al estilo de Java 21, que funciona igual en Java 25. Si usas Java 25, puedes quitar el public class … { y el static como aquí arriba.

Errores frecuentes#

Mensaje o síntomaQué significaCómo se arregla
No aparece ninguna ventanaFalta ventana.setVisible(true);Añádelo al final, después de meter todo en la ventana
Cierras la ventana y el programa no termina (el botón de parar de VS Code sigue activo)Falta setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)Añádelo al crear la ventana
La ventana sale diminuta, solo con la barra del títuloNo tiene tamañoUsa setSize(ancho, alto), o pack() para que se ajuste a lo que lleva dentro
La ventana tiene un aspecto antiguo, de hace veinte añosFalta FlatLightLaf.setup();, o está después de crear la ventanaPonlo como primera línea del main
package com.formdev.flatlaf does not existFalta la librería FlatLafMira Preparar el ordenador