Swing y JFC: guía completa para interfaces gráficas en Java 21

Swing lleva más de veinte años formando parte del ecosistema Java. Fue presentado con Java 1.2 en 1998 como sustituto de AWT —la biblioteca de componentes originales de Java— y desde entonces ha sido la opción principal para construir interfaces gráficas de escritorio en Java puro.

Con la llegada de JavaFX, muchos daban Swing por muerto. Sin embargo, en 2026 Swing sigue activo en entornos empresariales, herramientas internas, IDEs (IntelliJ IDEA, NetBeans) y decenas de aplicaciones legadas con millones de usuarios. OpenJDK mantiene Swing como parte del JDK estándar y no existe ningún plan de eliminación.

Swing vs JavaFX en 2026

Ambas opciones tienen su hueco:

  • Swing: integrado en el JDK, sin dependencias externas, maduro y estable, amplia documentación, perfecto para aplicaciones de escritorio empresariales.
  • JavaFX: diseño más moderno, CSS para estilos, separación FXML/controlador, mejores animaciones, pero requiere dependencia externa (desde Java 11).

Este tutorial se centra en Swing con Java 21 LTS. Aprenderás a construir interfaces profesionales usando la biblioteca estándar, y al final verás cómo FlatLaf transforma la apariencia de tu aplicación con un único cambio de Look and Feel.

Requisitos previos

Para seguir este tutorial necesitas:

  • Java 21 LTS instalado (descárgalo en adoptium.net o instálalo con SDKMAN: sdk install java 21-tem).
  • Un IDE con soporte Swing: IntelliJ IDEA (Community es gratuito), Eclipse, NetBeans o VS Code con el plugin Java.
  • Conocimientos básicos de Java: clases, objetos, herencia e interfaces. Si no los tienes, revisa primero el Tutorial Java Básico.

Conceptos clave antes de empezar

Event Dispatch Thread (EDT): Swing no es thread-safe. Todos los componentes deben crearse y modificarse en el EDT. Para asegurarlo, envuelve el punto de entrada de tu UI en SwingUtilities.invokeLater():

public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
        new MiVentana().setVisible(true);
    });
}

Jerarquía de componentes: Todo en Swing hereda de JComponent, que a su vez hereda de Container y Component de AWT. El contenedor raíz es JFrame, que contiene un JRootPane, que contiene el ContentPane donde añades tus componentes.

Tu primera ventana Swing con Java 21

import javax.swing.*;
import java.awt.*;

public class HolaMundoSwing {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Mi primera ventana");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(400, 300);
            frame.setLocationRelativeTo(null); // centrar en pantalla

            JLabel etiqueta = new JLabel("¡Hola, Swing en Java 21!", SwingConstants.CENTER);
            etiqueta.setFont(new Font("SansSerif", Font.BOLD, 20));
            frame.add(etiqueta, BorderLayout.CENTER);

            frame.setVisible(true);
        });
    }
}

Compila y ejecuta: javac HolaMundoSwing.java && java HolaMundoSwing. Verás una ventana centrada de 400×300 píxeles con el texto en negrita.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP