public Ventana() {
        initComponents();
        leerProperties();
        //PERSONAS
        //creo el modelo, sobreescribiendo el método isCellEditable para que
        //sólo pueda modificarse el campo persona.
        DefaultTableModel modeloPersona = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return columna == Constantes.column_nombre;
            }
        };
        //cargo el modelo
        modeloPersona.addColumn("ID");
        modeloPersona.addColumn("NOMBRE");
        jTable.setModel(modeloPersona);
        //COMPRAS
        DefaultTableModel modeloCompra = new DefaultTableModel();
        //cargo el modelo de las compras
        modeloCompra.addColumn("ID");
        modeloCompra.addColumn("Cantidad");
        modeloCompra.addColumn("Concepto");
        jTableCompras.setModel(modeloCompra);
        jTable.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent tme) {
                //cuando cambia algo en el modelo se modifica en el array en memoria                                     
                if (jTable.getSelectedRow() != -1 && !borrando) {
                    //cambiamos la persona
                    listaP.replace(
                            (Integer) jTable.getValueAt(jTable.getSelectedRow(), Constantes.column_id),
                            new Persona(
                                    Integer.parseInt(jTable.getValueAt(jTable.getSelectedRow(), Constantes.column_id).toString()),
                                    jTable.getValueAt(jTable.getSelectedRow(), Constantes.column_nombre).toString(),
                                    new LinkedHashMap<Integer, Compra>()
                            )
                    );
                }
            }
        });
        ventanaCompras.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        ventanaCompras.addWindowListener(new WindowListener() {

            @Override
            public void windowOpened(WindowEvent e) {
            }

            @Override
            public void windowClosing(WindowEvent e) {
                UIManager.put("OptionPane.noButtonText", "No, guarda los cambios");
                UIManager.put("OptionPane.yesButtonText", "Si, salir sin guardar");
                int guardar = JOptionPane.showConfirmDialog(ventanaCompras, "¿Desea salir sin guardar las compras de " + listaP.get(idPersona).getNombre()+"?");
                //cancelar=2,No=1, Si=0
                if (guardar == 2) {
                    //no hacmos nada porque es cancelar
                } else {
                    if (guardar == 1) {//No, guarda
                         // guardamos lo que hay en el modelo en el fichero         
                        LinkedHashMap<Integer, Compra> comprasP;
                        //de tabla a LinkedHashMap
                        comprasP = deTablaAMapCompras();
                        //y guardo a fichero
                        FicherosDatos fd = new FicherosDatos();
                        fd.guardarCompraDOM(rutaBD + idPersona + Constantes.archivoCompras, comprasP);
                        //guardo en la variable del array en memoria
                        listaP.get(idPersona).setCompras(comprasP);
                        //y por último salimos de las compras
                        ventanaCompras.setVisible(false);
                        
                    } else {//Si salir sin guardar
                       //No desea guardar, así que salgo sin guardar nada
                        ventanaCompras.setVisible(false);
                    }
                }

            }

            @Override
            public void windowClosed(WindowEvent e) {
            }

            @Override
            public void windowIconified(WindowEvent e) {
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
            }

            @Override
            public void windowActivated(WindowEvent e) {
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
            }
        });

    }