lunes, 18 de octubre de 2010

Clase TableModel basada en ArrayList [ ArraylistTableModel]

Este codigo implementa una simple clase donde los datos de un JTable se almacenan un model basado en ArrayList donde cada fila es otro ArrayList.


package miaplicacion.util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author dinfantas
 */
public class ArraylistTableModel extends AbstractTableModel {

    ArrayList data;
    private String[] columnNames;

    public ArraylistTableModel() {
    }

    public ArraylistTableModel(ArrayList datos, String[] cols) {
        this.data = datos;
        int numCols = cols.length;
        columnNames = new String[numCols];
        System.arraycopy(cols, 0, columnNames, 0, numCols);
    }

    /**

     * Overrides AbstractTableModel method. Returns the number of columns in
     * table
     *
     * @return int number of columns in the table.
     */
    public int getColumnCount() {

        return columnNames.length;
    }

    /**
     * Overrides AbstractTableModel method. Returns the number of rows in table
     *
     * @return int number of rows in the table.
     */
    public int getRowCount() {

        return data.size();
    }

    /**
     * Overrides AbstractTableModel method.
     *
     * @param colcolumn number column number
     *
     * @return String  column name.
     */
    @Override
    public String getColumnName(int col) {

        return columnNames[col];
    }

    /**
     * Overrides AbstractTableModel method.
     *
     * @param row row number
     * @param col column number
     *
     * @return Object the value at the specified cell.
     */
    public Object getValueAt(int row, int col) {

        ArrayList colArrayList = (ArrayList) data.get(row);
//    System.out.println("Celda[" + row + "," + col + "]" + colArrayList.get(col).toString());
        return colArrayList.get(col);
    }

    @Override
    public Class getColumnClass(int i) {
        ArrayList colArrayList = (ArrayList) data.get(0);
        return colArrayList.get(i).getClass();
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return super.isCellEditable(row, col);
    }

    

    @Override
    public void setValueAt(Object value, int row, int col) {
        ArrayList aux=(ArrayList) data.get(row);
        if(value instanceof Date){//para el caso de fechas
            SimpleDateFormat formateador=new SimpleDateFormat("yyyy-M-d");
            value=formateador.format(value);
        }
        aux.set(col, value);
        data.set(row, aux);
        if (col != 0){
            fireTableCellUpdated(row, col);
        }        
    }

    @Override
    public void fireTableCellUpdated(int row, int col) {
        if(this.getValueAt(row, 0) == Boolean.FALSE){
            this.setValueAt(Boolean.TRUE, row, 0);            
        }
    }


}

No hay comentarios:

Publicar un comentario

 
Powered by Blogger