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 consola | Programa con ventanas | |
|---|---|---|
| ¿Quién manda? | El programa: pregunta cuando quiere y espera la respuesta | El usuario: pulsa lo que quiere, cuando quiere |
| ¿Cómo se lee lo que hace el usuario? | Con Scanner | Con eventos: el programa reacciona a cada clic (lo verás en el tema de eventos) |
| ¿Qué ve el usuario? | Texto | Ventanas 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:
| Pieza | Qué es |
|---|---|
JFrame | La ventana en sí: el marco, con su título y los botones de minimizar y cerrar |
JPanel | Un contenedor: sirve para agrupar componentes y decidir cómo se colocan |
| Componentes | Lo 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);
});
}
}import javax.swing.*;
import com.formdev.flatlaf.FlatLightLaf;
void main() {
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:

Línea a línea:
| Línea | Qué 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íntoma | Qué significa | Cómo se arregla |
|---|---|---|
| No aparece ninguna ventana | Falta 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ítulo | No tiene tamaño | Usa setSize(ancho, alto), o pack() para que se ajuste a lo que lleva dentro |
| La ventana tiene un aspecto antiguo, de hace veinte años | Falta FlatLightLaf.setup();, o está después de crear la ventana | Ponlo como primera línea del main |
package com.formdev.flatlaf does not exist | Falta la librería FlatLaf | Mira Preparar el ordenador |