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

JFrame es el contenedor principal de cualquier aplicación Swing. Hereda de Frame (AWT) y añade soporte para el sistema de capas de Swing.

Estructura interna de JFrame

El JFrame contiene un JRootPane, que a su vez tiene:

  • ContentPane: el área donde añades tus componentes (frame.getContentPane() o simplemente frame.add()).
  • GlassPane: capa transparente sobre todo, útil para interceptar eventos.
  • LayeredPane: gestiona las capas (menús desplegables, tooltips, etc.).
  • JMenuBar: la barra de menús, que se añade con frame.setJMenuBar().

Configuración esencial de JFrame

JFrame frame = new JFrame("Título de la ventana");

// Comportamiento al cerrar la ventana
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Opciones: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, DISPOSE_ON_CLOSE, EXIT_ON_CLOSE

// Tamaño fijo
frame.setSize(800, 600);

// O ajuste automático al contenido
frame.pack();

// Centrar en pantalla
frame.setLocationRelativeTo(null);

// Icono de la aplicación
frame.setIconImage(new ImageIcon("icono.png").getImage());

// Mostrar la ventana
frame.setVisible(true);

Patrón recomendado: extender JFrame

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

public class VentanaPrincipal extends JFrame {

    public VentanaPrincipal() {
        super("Mi Aplicación");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800, 600);
        setLocationRelativeTo(null);

        initComponents();
    }

    private void initComponents() {
        // Paneles y componentes se añaden aquí
        JPanel panel = new JPanel(new BorderLayout());
        JLabel titulo = new JLabel("Bienvenido", SwingConstants.CENTER);
        titulo.setFont(new Font("SansSerif", Font.BOLD, 24));
        panel.add(titulo, BorderLayout.NORTH);
        add(panel);
    }

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

JDialog: ventanas secundarias

JDialog es el componente para ventanas secundarias. Puede ser modal (bloquea la ventana padre hasta que se cierra) o no modal:

// Diálogo modal
JDialog dialogo = new JDialog(frame, "Configuración", true);
dialogo.setSize(400, 300);
dialogo.setLocationRelativeTo(frame);
dialogo.setVisible(true);

// Diálogos predefinidos con JOptionPane
JOptionPane.showMessageDialog(frame, "Operación completada");
int respuesta = JOptionPane.showConfirmDialog(frame, "¿Deseas continuar?");
String texto = JOptionPane.showInputDialog(frame, "Introduce tu nombre:");

COMPARTE ESTE ARTÍCULO

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