java - validar - JTable+getColumnClass() devuelve nulo si una celda contiene NULL
recorrer una jtable java (5)
¿Sabes qué tipo esperas que contenga cada columna de antemano?
Si es así, puedes construir una matriz con los objetos de clase y simplemente devolver la adecuada.
Class[] columns = new Class[]{String.class, String.class, Date.class};
public Class getColumnClass(int c) {
return columns[c];
}
Estoy tratando de ordenar mi JTable extendiendo DefaultTableModel y reemplazando getColumnClass () de la siguiente manera:
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
Funciona perfectamente bien si no hay NULL en esa celda de la tabla. Así que lo modifiqué de la siguiente manera:
public Class getColumnClass(int c) {
for(int rowIndex = 0; rowIndex < data.size(); rowIndex++){
Object[] row = data.get(rowIndex);
if (row[c] != null) {
return getValueAt(rowIndex, c).getClass();
}
}
return getValueAt(0, c).getClass();
}
Ahora, de nuevo, funciona bien si hay al menos una celda en la columna que no sea NULL. Pero si todas las celdas en la columna son NULL, no funciona (''casue devuelve nullPointerException).
Por favor ............ ayuda ... gracias de antemano
Hasan
Elija el tipo ''predeterminado''. devuelve String.class; es una solución bastante segura.
Es extremadamente simple resolver este problema. Mira los cambios de código que hice. Este código fue probado y está libre de errores
public Class getColumnClass(int c) {
int columnCount;
// dataModel is an object of the data Model class(default or abstract)
columnCount=dataModel.getRowCount();
if(columnCount<=1){
return String.class;
}
return getValueAt(0, c).getClass();
}
Este es el código general que uso:
JTable table = new JTable(data, columnNames)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
};
public Class getColumnClass(int c)
{
for(int rowIndex = 0; rowIndex < data.size(); rowIndex++)
{
Object[] row = data.get(rowIndex);
if (row[c] != null) {
return getValueAt(rowIndex, c).getClass();
}
}
return String.class;
}
Se corrigió el problema devolviendo String.class si todas las celdas de la columna son NULL