Swing
Qué necesitas para ver una ventana
Para hacer una ventana en Java puedes usar Swing y la clase JFrame. JFrame representa una ventana principal: tiene título, borde, botón de cierre y un content pane donde se añaden los componentes.
La primera prueba debe ser pequeña. Si añades menús, paneles propios y eventos desde el principio, será más difícil saber si el problema está en la ventana o en el contenido.
Ejemplo mínimo con JFrame
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class VentanaBasica {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new JFrame("Mi primera ventana");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel("Hola desde Swing"));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
El orden importa: primero creas el JFrame, configuras el cierre, añades contenido, llamas a pack y finalmente haces visible la ventana. Si llamas a setVisible antes de añadir componentes, puedes ver una ventana vacía o con tamaño incorrecto.
Comprueba tu JFrame
Pasos para ampliar el ejemplo
- Sustituye el JLabel por un JPanel con layout si necesitas más componentes.
- Usa pack después de añadir los componentes para calcular tamaño preferido.
- Cambia EXIT_ON_CLOSE por DISPOSE_ON_CLOSE si la ventana no debe cerrar toda la aplicación.
- Mantén la creación de la interfaz dentro de EventQueue.invokeLater.
- Si el contenido no aparece, revisa que lo añadiste al frame o al panel correcto.
Errores frecuentes con JFrame
| Síntoma | Causa probable | Qué revisar |
|---|---|---|
| No aparece la ventana | No se llamó a setVisible(true) | Coloca setVisible al final |
| Ventana demasiado pequeña | No hay componentes o falta pack/setSize | Añade contenido y llama a pack |
| La app no termina al cerrar | Operación de cierre incorrecta | Usa EXIT_ON_CLOSE en ejemplos simples |
| Componentes desordenados | Falta layout en el panel | Usa BorderLayout, FlowLayout o GridLayout según el caso |
Swing, AWT y JavaFX
Swing sigue siendo útil para aprender ventanas de escritorio clásicas y para mantener aplicaciones existentes. JFrame pertenece a Swing, que se apoya en AWT para muchas piezas de ventana y eventos.
Si empiezas un proyecto nuevo de interfaz moderna, también puedes valorar JavaFX. Para entender ejemplos antiguos, exámenes o herramientas internas, JFrame sigue apareciendo mucho y conviene dominar el caso mínimo.
Preguntas frecuentes
¿Necesito extender JFrame?
No para empezar. Puedes crear un JFrame dentro del main y pasarle componentes. Extender JFrame solo tiene sentido si encapsulas una ventana completa.
¿Por qué se usa EventQueue.invokeLater?
Swing debe crear y actualizar la interfaz en el hilo de eventos. invokeLater coloca esa creación en el lugar correcto.
¿pack o setSize?
pack calcula el tamaño según componentes. setSize sirve para pruebas rápidas, pero en interfaces reales pack suele ser más limpio.
Sigue practicando Java
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.