Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > A vueltas con el JTable

Estoy haciendo una aplicación en Java, en la cual tengo que llenar un JTable con datos de 3 arrays. Para ello, me he hecho un modelo de tabla:


public class Modelo_Tabla extends AbstractTableModel{

private int filas;
private int columnas=4;
private String[] array1;
private String[] array2;
private String[] array3;
String[] cab = { "cab1", "cab2", "cab3", "cab4" };

public Modelo_Tabla(int filas,int columnas){

this.filas=filas;
this.columnas=columnas;
}

public Modelo_Tabla(){}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

super.setValueAt(aValue, rowIndex, columnIndex);
}

@Override
public int getColumnCount() {

return cab.length;
}

@Override
public int getRowCount() {

return array1.length;
}

@Override
public String getValueAt(int row, int col) {
Object resultado=null;
switch(col){
case 0:
resultado=array1[row];
break;
case 1:
resultado=array2[row];
break;
case 2:
resultado=array3[row];
break;
case 3:
return null;
}
return (String) resultado;
}
public void setArray1(String[] array){

this.array1=array;
}

public void setArray2(String[] array) {
this.array2 = array;
}

public void setArray3(String[] array) {
this.array3 = array;
}

public String getColumnName(int col){

return cab[col];
}
}

Para llenar la tabla, tengo un método (llamado colocar_tabla()) que devuelve un Modelo_Tabla, se supone que ya con todos los datos rellenos. La tabla la lleno de ésta manera:


private Modelo_Tabla colocarTabla() {

Modelo_Tabla tabla = new Modelo_Tabla(numFilas, 4);//4 columnas, la 4ª es //un boolean
Utils utils = new Utils();//Es una clase de ayuda con un método para //concatenar los diversos String[] que forman cada columna

arraycol1 = utils.concatenarString(Arrayparaconcatenar1,
arrayparaconcatenar2);//para la primera columna
arraycol2 = utils.concatenarString(arrayparaconcatenar3,
arrayparaconcatenar4);//para la segunda columna
arraycol3 = utils.concatenarString(arrayparaconcatenar5,
arrayparaconcatenar6);//para la tercera columna

for (int i = 0; i

Dentro del panel principal de la ventana me he hecho otro panel más pequeño (llamado simplemente "panel") para albergar la tabla. la tabla la coloco así:

tabla_a_colocar = crearTablas();


tabla2 = new JTable(tabla_a_colocar);
System.out.println("Colocamos la tabla en el ScrollPane.");
JScrollPane scroll = new JScrollPane(tabla2);
System.out.println("Y colocamos el scrollPane en el panel")
scroll.add(panel);

Y el resultado es...que no se ve la tabla. Tengo el panel donde va incrustado el scrollPane pintado de azul. El panel se ve, pero no así la tabla. Que tengo hecho mal? Agradecería una respuesta, ya que me estoy volviendo loco y no sé que tengo mal.

Muchísimas gracias.

noviembre 10, 2011 | Unregistered CommenterFustigador

No se ve bien el método para llenar la tabla, debo haberme hecho un lío con las etiquetas "code". Este es el método:


private Modelo_Tabla colocarTabla() {

Modelo_Tabla tabla = new Modelo_Tabla(numFilas, 4);//4 columnas, la 4ª es //un boolean
Utils utils = new Utils();//Es una clase de ayuda con un método para //concatenar los diversos String[] que forman cada columna

arraycol1 = utils.concatenarString(Arrayparaconcatenar1,
arrayparaconcatenar2);//para la primera columna
arraycol2 = utils.concatenarString(arrayparaconcatenar3,
arrayparaconcatenar4);//para la segunda columna
arraycol3 = utils.concatenarString(arrayparaconcatenar5,
arrayparaconcatenar6);//para la tercera columna

for (int i = 0; i < arraycol1.length; i++) {
String valor1=arraycol1[i];
String valor2=arraycol2[i];//todos los arrays tienen el mismo tamaño.
String valor3=arraycol3[i];
tabla.setValueAt(valor1, i, 0);

tabla.setValueAt(valor2, i, 1);
tabla.setValueAt(valor3, i, 2);

}

return tabla;
}

Gracias!

noviembre 10, 2011 | Unregistered CommenterFustigador

¿Para qué añades el panel al scroll?

noviembre 10, 2011 | Registered Commenterchoces

Hmm hasta donde yo sé (podría equivocarme) lo que hago es añadir el scroll al panel.

noviembre 10, 2011 | Unregistered CommenterFustigador

Nah, tienes razón, lo puse al revés. Qué tonto soy.

Gracias por responder.

noviembre 10, 2011 | Unregistered CommenterFustigador

Tonto no, que eso nos pasa a todos, de vez en cuando. :D
Ya que me puse a buscar:

public Component add(Component comp)
Appends the specified component to the end of this container. This is a convenience method for addImpl(java.awt.Component, java.lang.Object, int).
This method changes layout-related information, and therefore, invalidates the component hierarchy. If the container has already been displayed, the hierarchy must be validated thereafter in order to display the added component.

Es un método de la clase Container, que no es tan evidente de encontrar.
A veces el API de Java es peor que un Laberinto con tres Minotauros dentro. ;)

noviembre 10, 2011 | Registered Commenterchoces