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
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.