> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud5-exercicios/modelo-vista-controlador.md).

# Modelo Vista Controlador

1. Crea en IntellIJ un **novo proxecto** de tipo Java que se chame ModeloVistaControlador. Dentro do proxecto crea un paquete que se chame vista, e outro que se chame modelo
2. Crea unha clase Persona no paquete modelo con atributos nombre, apellidos, fechaNacimiento e ciudad, que ten getters e setters correspondentes, un constructor con todos os atributos e un método toString
3. Crea unha clase VentanaPrincipal que extenda de JFrame no paquete vista
4. Crea no paquete vista tres clases que extendan de JPanel, que van a permitir estructurar a VentanPrincial en tres partes:
   * **Panel Superior:** Contén unha sección de título para VentanaPrincipal.
     * Contén un atributo tipo Label denominado cabeceira, que contén o texto estático "Listado de Personas", que se escribe en letra Arial, negrita e tamaño 40
     * Emprega un grid tipo GridBagLayout que centra o elemento automáticamente no panel
     * Establece a dimensión do panel en 600 x 60
     * Establece como color de fondo do panel o verde
     * Establece os getters para os atributos
   * **Panel Inferior:** Contén unha sección de pé para engadir novas persoas
     * Contén un atributo tipo botón co texto "Nueva Persona"
     * Establece a dimensión do panel en 600 x 60
     * Establece como color de fondo do panel o verde
     * Establece os getters para os atributos
   * **Panel Central:** Contén unha taboa que representa unha lista de persoas. Para isto:
     * Conten como atributos un obxecto JTable, un DefaultTableModel e un JScrollPane. O obxectivo de este ultimo e habilitar o scrolleo na tabla se os elementos non caben na pantalla
     * No constructor do panel central:
       * Define un Array de strings denominado columnas que conteña o nome das columnas da clase persona
       * Inicializa o modelo de tabla pasandolle como parametros as columnas e o valor de filas 0
       * Inicializa a tabla pasandolle o modelo de tabla recibido no punto anterior
       * Inicializa o scrollPane pasandole a tabla inicializada no punto anterior
       * engade o scrollPane ao panel, indicandolle que se alinee no centro
     * Define un método añadirPersona, que recibe unha Persoa e chama a addRow do modelo. O método addRow vai a recibir un array de obxectos, no que cada parametro será un atributo da Persoa que recibe como parametro o método añadirPersona.
     * Define getters para cada unha dos atrobutos
5. Na clase VentanaPrincipal fai o seguinte:
   1. Define atributos panelSuperior, panelInferior e panelCentral
   2. Crea un constructor no que se faga o seguinte:
      1. Establece un título denominado Gestión de Personas
      2. Establece a dimensión do Frame en 600 x 400
      3. Establece a operación de peche por defecto
      4. Establece un borderLayout por defecto
      5. Inicializa os paneles
      6. Engade os paneles ao Frame, coas ubicacións Norte, Centro e Sur
      7. Establece o Frame como visible
      8. Engade getters para os paneles


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud5-exercicios/modelo-vista-controlador.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
