AbstractTableModel

Jorge
06 de Julio del 2004
Necesito añadir filas dinamicamente a una tabla que hereda de un AbstractTableModel, pero el método AddRow no está implementado, y no se como debo implementarlo.

minyatur
06 de Julio del 2004
Prueba a extender la clase abstractablemodel, como el nombre indica es una clase a abstracta que no implementa todas sus metodos. Haz por ejemplo esta clase:

import javax.swing.table.*;
import java.util.ArrayList;
import java.util.*;


public class MiTableModel extends AbstractTableModel implements TableModel {

private String [] columnNames;
private listaObjetos data = new listaObjetos();
private boolean editable = true;

public MiTableModel(String [] cabecera) {
columnNames = cabecera;
}

public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.length();
}

public String getColumnName(int col) {
return columnNames[col];
}

public Object getValueAt(int row, int col) {
return data.getXY(row, col);
}


/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn\'t implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

/*
* Don\'t need to implement this method unless your table\'s
* editable.
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
return editable;
}

/*
* Don\'t need to implement this method unless your table\'s
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
// data[row][col] = new Integer((String)value);
data.setXY(row, col, value);
}

/* private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();

for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
*/
public void addRow(Object [] vector) {
data.add(data.length(), vector);
fireTableDataChanged();
}

public void delRow(int row) {
data.del(row);
fireTableDataChanged();
}

public void setEditable(boolean valor) {
editable = valor;
}
}

class listaObjetos {
private ArrayList tabla = new ArrayList();

public void add(int row, Object [] elemento) {
tabla.add(row, elemento);
}

public Object [] get(int clave) {
return (Object []) tabla.get(clave);
}

public int length() {
return tabla.size();
}

public Object getXY(int x, int y) {
Object [] fila = (Object[]) tabla.get(x);
return fila [y];
}

public void setXY(int x, int y, Object datos) {
// Object fila = getXY(x, y);
Object [] fila = (Object [])tabla.get(x);
fila[y] = datos;
}

public void del(int x) {
tabla.remove(x);
}
}

Juan David Cuartas
06 de Julio del 2004
MUCHISIMAS GRACIAS!!!!!!!!!!!!!!!!!!!!
Por casualidad lei su respuesta
y el método fireTableDataChanged();
Me salvo la vida, y de malas el man
Que "Sabe Programar" y no sabe ingles
Suerte