🖱️ “Atención: si pensabas que un botón era solo para pulsar, aquí descubrirás que puede ser azul, redondo, con sombra, con evento… y que siempre falla en el peor momento 😅”
PARTE TEÓRICA
PARTE PRÁCTICA
Diseñar una interfaz a partir de un wireframe y un árbol de contenedores.
Elegir conscientemente cuántos JPanel usar y qué layout conviene en cada zona.
Practicar BorderLayout, FlowLayout, GridLayout y GridBagLayout en una sola ventana + JDialog modal.
Entregar capturas + esquema + breve explicación (RA1 y RA4).
Haz un boceto de esta ventana “Gestor de usuarios”:
Header (arriba): título + icono.
Lateral (izquierda): 5 botones de navegación (Dashboard, Usuarios, Informes, Ajustes, Ayuda).
Centro (formulario): 2 columnas con etiquetas/campos (Nombre, Email, Rol (JComboBox), Activo (JCheckBox), Notas (JTextArea)).
Derecha (previsualización): JTabbedPane con “Resumen” y “Logs”.
Barra inferior (abajo): botones “Cancelar”, “Limpiar”, “Guardar” alineados a la derecha.
Dibuja el árbol de contenedores:
JFrame (BorderLayout)
├─ NORTH: headerPanel (FlowLayout)
├─ WEST: navPanel (GridLayout 5x1)
├─ CENTER: formPanel (GridBagLayout)
├─ EAST: previewPanel (BorderLayout) → dentro: JTabbedPane
└─ SOUTH: buttonBar (FlowLayout RIGHT)
Lista de componentes y propiedades clave (fuentes, tooltips, gaps, insets).
⚠️ Solo cuando tengas este esquema aprobado, pasas a IntelliJ.
New → GUI Form → GestorUsuarios.
Selecciona el root panel → Right click → Set Layout → BorderLayout.
Añade JPanel → posición NORTH del BorderLayout.
Set Layout → FlowLayout.
Inserta JLabel (icono+título).
Propiedades: text = "Gestor de usuarios", font = Bold 18, icon (si tenéis).
(Opcional) Añade un JSeparator debajo (queda elegante).
JPanel → posición WEST.
Set Layout → GridLayout y pon rows=5, cols=1, ajusta vgap=5.
Añade 5 JButton: Dashboard, Usuarios, Informes, Ajustes, Ayuda.
Propiedades de botones: Same Size Horizontally = true (si usas GridLayoutManager de IntelliJ, marca “Same Size…” para uniformar).
JPanel → posición CENTER.
Set Layout → GridBagLayout.
Inserta por filas (usa insets 5, anchor WEST, fill HORIZONTAL):
Fila 0: JLabel "Nombre" (gridx=0), JTextField (gridx=1, weightx=1, fill=HORIZONTAL).
Fila 1: JLabel "Email", JTextField (igual que arriba).
Fila 2: JLabel "Rol", JComboBox (modelo: Admin, Editor, Invitado).
Fila 3: JLabel "Activo", JCheckBox.
Fila 4: JLabel "Notas", JScrollPane con JTextArea (gridwidth=1, weighty=1, fill=BOTH) para que crezca verticalmente.
Revisa en cada campo:
weightx=1 en la columna de entradas para que se estiren al redimensionar.
insets = 5,5,5,5 (márgenes).
anchor = WEST en etiquetas.
fill = HORIZONTAL/BOTH en campos para que no “floten”.
JPanel → posición EAST → Set Layout → BorderLayout.
Dentro, añade un JTabbedPane (CENTER).
Pestaña 1: “Resumen” → JTextArea readOnly dentro de JScrollPane.
Pestaña 2: “Logs” → JList o JTextArea.
Fija un Preferred Size (p.ej. 260 px de ancho) para que no coma todo el espacio.
JPanel → posición SOUTH.
Set Layout → FlowLayout y en propiedades alignment = RIGHT.
Añade JButton “Cancelar”, “Limpiar”, “Guardar”.
Marca Same Size Horizontally para uniformar.
(Opcional) Define Default Button = Guardar (en el JFrame).
New → GUI Form → DialogConfirmacion (JDialog).
Añade JLabel (“¿Guardar cambios?”), JButton “Aceptar”, JButton “Cancelar”.
En la ventana principal, al pulsar Guardar:
dialog.setModal(true); dialog.pack(); dialog.setVisible(true);
(Sin lógica aún; esto es Tema 2: estructura y eventos mínimos).
Si algo queda demasiado separado al maximizar, es porque su contenedor usa GridLayoutManager con Size Policy = “Can grow” y sin pesos.
En GridBagLayout, controla weightx/weighty y fill.
En FlowLayout, manda el tamaño preferido de los componentes (no crece a pantalla completa).
En BorderLayout, el CENTER crece; EAST/WEST conservan su preferred width.
Si no puedes meter un componente dentro de un panel:
Cortar (Ctrl+X) → seleccionar el panel → Pegar (Ctrl+V).
O Right click panel → Add → [componente].
Wireframe dibujado (foto/escaneo).
Árbol de contenedores (como el del enunciado) indicando qué layout usa cada JPanel y por qué.
Capturas:
Vista general.
Redimensionada (para comprobar que el CENTER y Notas crecen bien).
Pestañas del JTabbedPane.
Diálogo modal abierto.
Mini tabla con las propiedades clave usadas (insets, weightx, fill, alignment…).
Enlace a GitHub con el .form, .java y el PDF con la planificación.
Estructura / layouts elegidos (3 pts): usa Border + Flow + Grid + GridBag correctamente, con justificación.
Uso de propiedades de distribución (3 pts): insets, hgap/vgap, anchor, fill, weightx/weighty, preferred size.
Comportamiento al redimensionar (2 pts): CENTER y Notas crecen, EAST se mantiene estable, botonera alineada.
Presentación/README (2 pts): wireframe, árbol de paneles, capturas y explicación.
Añade un JMenuBar arriba (Archivo/Editar/Ayuda).
Convierte la botonera a GridLayout(1,3) y compárala con Flow RIGHT.
Cambia el formulario a solo GridBag con gridwidth=2 para Notas (practicar spans).
Cambiar layout del panel: Right click panel → Set Layout.
Mover a otro panel: cortar (Ctrl+X) → seleccionar panel destino → pegar (Ctrl+V).
Igualar tamaños: propiedades del contenedor → Same Size Horizontally/Vertically.
Márgenes: insets (GridBag) o margins/border del panel.
Espaciados: hgap, vgap (Flow/Grid).
Que los campos crezcan: en GridBag → weightx=1, fill=HORIZONTAL/BOTH.
Tema 1: Introducción a la confección de interfaces
Tema 2: Clases y componentes
Tema 3: Interfaces con XML
Tema 4: Creación de componentes visuales
Tema 5: Explotación de componentes visuales
Tema 6: Usabilidad I
Tema 7: Usabilidad II
Tema 8:Confección de informes I