nombres de columnas

Rowan
24 de Abril del 2006
Hola!
He creado un modelo de tabla, y despues inserto esa tabla en un scrollpanel. El problema es que no coge los nombres de las columnas y escribe los que supongo pondra por defecto A,B,C,D.El resto de la tabla la coge bien.
El codigo del modelo de tabla es el siguiente:

public class PlieguesTabla extends AbstractTableModel{
public PlieguesTabla() {
}
final String[] columnNames={"PLIEGUES","PT","PB","PS","PI"};
final Object[][] Datos ={{"MEDIDA1",new Integer (0),new Integer (0), new Integer (0), new Integer (0) },{"MEDIDA2",new Integer (0),new Integer (0), new Integer (0), new Integer (0)}
,{"MEDIDA3",new Integer (0),new Integer (0), new Integer (0), new Integer (0)}
,{"MEDIA", new Integer(0), new Integer (0), new Integer (0), new Integer (0)}};

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

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

public Object getValueAt(int fila, int columna) {
return Datos[fila][columna];
}

public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

public boolean isCellEditable( int fila,int columna)
{
if (columna < 2)
{
return false;
}
else
{
return true;
}
}

public void setValueAt(Object value, int fila,int columna)
{
Datos[fila][columna] = value;
}

}
/////////////////////////////////////////////////////////////////////
Si alguien tiene alguna idea...
Gracias!

Diego
24 de Abril del 2006
Como veo que te lo has currado, te digo como lo haría. Yo heredaría directamente de DefaultTableModel que implementa algunos métodos que tú implementas, y aunque no la he ejecutado, compila correctamente:
import javax.swing.table.DefaultTableModel;

public class PlieguesTabla extends DefaultTableModel{

// Nombres de las columnas, compartidos por todas las tablas
private static final String[] columnNames={"PLIEGUES","PT","PB","PS","PI"};

// Por defecto una tabla de tres medidas
public PlieguesTabla(){
this(3);
}

// Constructor para una tabla de tantas medidas como se desee
public PlieguesTabla(int medidas){
super(new Object[medidas+1][columnNames.length],columnNames);
for(int i=0;i<medidas;i++)
setValueAt("MEDIDA"+i,i,0);
setValueAt("MEDIA",medidas,0);
}

// El comportamiento por defecto siempre devuelve Object
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

// Supongo que quieres que no se pueda escribir en la primera fila
public boolean isCellEditable(int fila,int columna){
return fila>=0&&fila<getRowCount()&&columna>0&&columna<getColumnCount();
}

// para evitar un warning, se utiliza para el control de versiones
private static final long serialVersionUID=0;
}
Si desde la columna 1 hasta el final sólo vas a usar Integer, Double o Number en general, podrías sobrecargar los métodos set/get de modo que sólo aceptasen y devolviesen esos valores.
Espero que te sirva

Diego
24 de Abril del 2006
Se me ha olvidado inicializar los ceros en el constructor:
public PlieguesTabla(int medidas){
super(new Object[medidas+1][columnNames.length],columnNames);
for(int i=0;i<medidas;i++)
setValueAt("MEDIDA"+i,i,0);
setValueAt("MEDIA",medidas,0);
Integer cero=new Integer(0);
for(int i=0;i<medidas;i++){
for(int j=1;j<columnNames.length;j++)
setValueAt(cero,i,j);
}
}

Nota: Supongo que utilizas java v5.0, si no, cambia Class<?> por Class.