nombres de columnas
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!
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!
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
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
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.
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.