lunes, 23 de enero de 2012

Ocultar columnas en un JTable

Si estamos trabajando con bases de datos y cargamos una consulta en un un objeto JTable, puede que necesitemos ocultar columnas en dicho objeto, especialment si existen columnas que hacen referencia a llaves primarias.
Una posible solución podría ser la siguiente:

    public void ocultarColumnas(int... indiceColumnas){
//Evitamos un NullPointerException
        if(indiceColumnas==null)
            return;
        for(int numColumna:indiceColumnas){
            TableColumn col=getColumn(getColumnName(numColumna));
            col.setWidth(0);
            col.setMaxWidth(0);
            col.setMinWidth(0);
            col.setPreferredWidth(0);
            col.setResizable(false);
        }
        doLayout();
    }

Se puede utilizar asi:
Podemos pasarle un arreglo int con los indices de las columnas
tabla.ocultarColumnas(array);

o bien si queremos solo una columna:
tabla.ocultarColumnas(numColumnas);

o bien algunas de ellas sin crear el arreglo:
tabla.ocultarColumnas(numColumna1,numColumna2,numColumna3);

4 comentarios:

  1. La forma correcta es usando…

    jTable.removeColumn(ListadoTable.getColumnModel().getColumn(1));

    ya que con el width solo la hacemos más pequeña y puede visualizarse si hacemos un resize de una columna adjunta.

    Esto no hace que se pierda su valor de columna.

    Saludos

    ResponderEliminar
  2. Tienes muchas razón, eso es posible, solo que ví que por ejemplo si lo hacemos con la columna 0, para poder obtener el valor de la columna, lo deberemos hacer desde el modelo de datos, es decir:
    jtable.getModel().getColumnName(0) y no así jtable.getColumnName(0)
    en el primer caso efectivamente nos devuelve el valor de la columna que ocultamos (el de la posicion 0 en el modelo de datos), en el segundo el valor de la columna en la posicion uno en el modelo de datos.

    ResponderEliminar
  3. super. habia escuchado que con remove se eliminaba literalmente la columna del modelo y la compilacion marcaba errores. pero no es verdad, funciona perfectamente. gracias brodi.

    ResponderEliminar