> 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/modelo-vista-controlador-iv.md).

# Modelo Vista Controlador IV

1. Crea un PanelPersona que conta coas seguintes caracerísticas
   1. Contara cos seguintes atributos:
      1. Un JTextField txtNombre e outro txtApellidos
      2. Un JSpinner fechaNacimiento
      3. Un JComboBox\<String> de tipo cbCiudad
      4. Un ButtonGroup denominado grupoSexo que contará con dos JRadioButton rbHombre y rbMujer
      5. Un booleano editable, que determinará si o componente é editable o no
   2. Un constructor que recibe como parámetro si é editable ou non, no que se vai a facer o seguinte:
      1. Asigna o valor de editable ao panel
      2. Establece como layout un FlowLayout
      3. Engade ao layout unha etiqueta "Nombre:", inicializa o JTextField a 15 columnas, estableceo como editable e engadeao ao layout
      4. Fai o mesmo para os apelidos
      5. Engade no layout unha etiqueta data de nacemento, inicializa o JSpinner data de nacemento, marcao como activado e establece o editor para que teña un formato "dd/MM/yyyy" (Ver código mais abaixo)
      6. Engade no layout unha etiqueta "Ciudad", crea o seu JComboBox pasandolle un array de String que conteña as 7 cidades galegas (A Coruña, Santiago, Ferrol, Vigo, Pontevedra, Lugo e Ourense). Estableceo como editable e engadeo ao layout
      7. Engade unha etiqueta sexo. Para xestionar isto:
         1. Inicializa un JRadioButton "Hombre" e marcao como activo
         2. Incializa un JRadioButton "Muller" e marcao como activo
         3. Inicializa un ButtonGroup e engadelles os JRadioButtons anteriores
         4. Crea un novo JPanel(), engadelle o JRadioButtons, e engade o pane ao layout
   3. Un método público crearPersona() que vai a:
      1. Recuperar os valores de cada un dos compoñentes do panel
      2. Vai a crear e devolver un obxecto Persoa

```java
//Iniciar Spinner
spFechaNacimiento = new JSpinner(new SpinnerDateModel());
spFechaNacimiento.setEnabled(editable);
spFechaNacimiento.setEditor(new JSpinner.DateEditor(spFechaNacimiento, "dd/MM/yyyy"));
```

```java
// Recupear info de spinner
String fecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(spFechaNacimiento.getValue());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate fechaLD = LocalDate.parse(fecha, formatter);
```

2. Crea un novo controlador denominado ControladorDialogoPersona. Vai a contar con:
   1. Un atributo denominado vista de tipo DialogoNuevaPersona e un PersonaService
   2. Un método inicializar que que vai a engadir un ActionListener ao botón "Guardar", no cal:
      1. Vai a crear un obxecto persoa a partir do método da vista que recolle os datos do formulario
      2. Vai a chamar ao método de crearPersona do servicio
      3. Fai un dispose() do dialogo
3. Engade no PanelInferior un novo botón denominado botonActualizar. Inicializa o botón no constructor do Panel e define un método getter
4. Engade no ControladorPersona un método inicializarBotonActualizar(). Este método debe de engadir un ActionListener que chame ao método cargar tabla do controlador


---

# 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/modelo-vista-controlador-iv.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.
