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

Una aplicación Swing bien estructurada separa la lógica del negocio de la presentación. El patrón MVC (Modelo-Vista-Controlador) es el más habitual:

  • Modelo: las clases de negocio (entidades, servicios, repositorios) — sin ninguna importación de Swing.
  • Vista: los componentes Swing (JFrame, JPanel, JTable…) — solo presenta datos, no los procesa.
  • Controlador: conecta los listeners de la vista con los métodos del modelo.

Ejemplo: aplicación de gestión de contactos

// Modelo
record Contacto(String nombre, String email, String telefono) {}

class ContactoService {
    private final List<Contacto> lista = new ArrayList<>();
    public void agregar(Contacto c)         { lista.add(c); }
    public void eliminar(int indice)        { lista.remove(indice); }
    public List<Contacto> getTodos()        { return Collections.unmodifiableList(lista); }
}

// Vista (JPanel con tabla y formulario)
class ContactoPanel extends JPanel {
    final JTextField campoNombre  = new JTextField(20);
    final JTextField campoEmail   = new JTextField(20);
    final JTextField campoTelef   = new JTextField(15);
    final JButton    btnGuardar   = new JButton("Guardar");
    final JButton    btnEliminar  = new JButton("Eliminar");
    final ContactoTableModel modelo = new ContactoTableModel();
    final JTable     tabla        = new JTable(modelo);

    ContactoPanel() { initUI(); }
    // ... initUI() crea el layout con los campos y la tabla
}

// Controlador
class ContactoController {
    private final ContactoService service;
    private final ContactoPanel   vista;

    ContactoController(ContactoService s, ContactoPanel v) {
        this.service = s; this.vista = v;
        v.btnGuardar.addActionListener(e -> guardar());
        v.btnEliminar.addActionListener(e -> eliminar());
    }

    private void guardar() {
        if (vista.campoNombre.getText().isBlank()) return;
        Contacto c = new Contacto(
            vista.campoNombre.getText().trim(),
            vista.campoEmail.getText().trim(),
            vista.campoTelef.getText().trim()
        );
        service.agregar(c);
        vista.modelo.setContactos(service.getTodos());
        vista.campoNombre.setText("");
    }
}

Recursos y próximos pasos

Para profundizar en Swing con Java 21:

Si quieres conectar tu aplicación Swing a una base de datos, consulta nuestro tutorial de Acceso a bases de datos con JDBC, o aprende a desplegarla como aplicación web con Servlets y JSP con Jakarta EE 10.

Imagen: Pexels / Zayed Hossain

COMPARTE ESTE ARTÍCULO

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