package docen_swing;

import javax.swing.table.AbstractTableModel;
import java.util.Vector;

/*************************************************************************************
Modelo de datos para un JTable.
Permite añadir y eliminar filas.
**************************************************************************************/
class modelo_grid extends AbstractTableModel {
   Vector filas = new Vector();          // Vector de filas (vector de vectores)
   Vector columnas = new Vector();       // Vector de columnas

   /*** Constructor: carga datos ***/
   modelo_grid() { cargar_datos(); }

   /**********************************************
    * Carga de datos
    ************************************************/
   void cargar_datos() {

       /**** Creo el vector que define las columnas ***/
       columnas.add( (String) "Persona");
       columnas.add( (String) "Actividad");
       columnas.add( (String) "Objeto");

       /**** Creo un vector de vectores (vector de filas) ***/
       Vector fila0 = new Vector();
       fila0.add( (String) "María");
       fila0.add( (String) "Salta");
       fila0.add( (String) "El charco");
       filas.add( fila0 );                 // Añado fila (vector) al vector de vectores
       Vector fila1 = new Vector();
       fila1.add( (String) "Pedro");
       fila1.add( (String) "Juega");
       fila1.add( (String) "Baloncesto");
       filas.add( fila1 );                 // Añado fila (vector) al vector de vectores
       Vector fila2 = new Vector();
       fila2.add( (String) "Ana");
       fila2.add( (String) "Lee");
       fila2.add( (String) "Una revista");
       filas.add( fila2 );                 // Añado fila (vector) al vector de vectores
    }

    /*************** getColumnName() *********************/
    public String getColumnName( int c ) {
       return (String) columnas.elementAt( c );
    }

    /*************** getColumnCount() ******************/
    public int getColumnCount() {
       return columnas.size();
    }

    /****************** getRowCount() *******************/
    public int getRowCount() {
       return filas.size();
    }

    /*******************  setValueAt() *********************/
    /*** Llamada automáticamente cuando termina la edición de una celda ***/
    public void setValueAt( Object valor, int fila, int col ) {
       Vector v = (Vector) filas.elementAt(fila);
       v.set( col, valor);
    }

    /*******************  getValueAt() *********************/
    public Object getValueAt( int fila, int col ) {
       Vector v = (Vector) filas.elementAt(fila);
       return v.elementAt( col );
    }

    /*** Para que todas las celdas sean editables ****/
    public boolean isCellEditable( int fila, int col ) { return true; }

    /**********************************************************************
     * Añade nueva fila al modelo y en la columna (col) pone el texto.
     * Ordena a la tabla (vista) que se actualice
     ***********************************************************************/
    public void añadir( String texto, int col ) {
       Vector fila_nueva = new Vector();         // Nueva fila

       /*** Recorro todas las cols de la nueva fila, sólo pongo el texto en columna col */
       for ( int i = 0; i < this.getColumnCount(); i ++) {
	  if (i != col)
	     fila_nueva.add("");
	  else
	     fila_nueva.add(texto);
       }

       filas.add( fila_nueva );                                 // Añado fila al modelo
       this.fireTableRowsInserted( filas.size(),filas.size() ); // Ordeno a la tabla que se actualice
    }

    /************************************************************************
     * Elimina la fila y ordena a la tabla (vista) que se actualice
     ************************************************************************/
    public void eliminar( int fila ) {
       filas.remove( fila );
       this.fireTableRowsDeleted( fila, fila );
    }

 }    /////////////////////////// Fin de clase modelo_grid \\\\\\\\\\\\\\\\\\\\\\\\ºº

