2011-05-21 11 views
6

estoy usando JXTable que es a partir de componentes SwingX. Si uso el método setSortable(boolean flag), habilitará o deshabilitará la ordenación para todas las columnas.Clasificación JXTable con SwingX

Como requisito de mi Quiero desactivar la ordenación en algunas columnas y habilitar la clasificación para otras columnas.

¿Alguien puede ayudar a lograr esta funcionalidad?


Gracias por su respuesta. ¿Me pueden ayudar con el uso de setSorterClass(String sorterClassName) para desactivar la clasificación de una columna? ¿Podría darme algún código exampllex? Será muy útil para mí.

Respuesta

2

Creo que, al menos según lo que he encontrado en Internet, puede lograrlo configurando setSorterClass(null) para esa columna.

Como podemos leer en the cached web site, como swinglabs página de ayuda parece estar abajo, apuesto a que tiene algo que ver con el reciente desastre en el servicio de java.net. "JXTables columna de clasificación han activado por defecto. Puede desactivar todas columna de ordenación utilizando setSortingEnabled (booleano allowSort). También puede desactivar la clasificación en una sola columna usando setSorterClass (String sorterClassName) con un nombre de clase clasificador nulo."

personalmente, creo que no hay ningún punto de bloquear el usuario de la clasificación en una columna de tabla seleccionada. De todos modos, si un usuario desea ordenar una columna, debería poder hacerlo, al final creo que es mejor permitirle a un usuario más y menos, por supuesto, cuando se trata de detalles como lo que él/ella puede control en la vista de él/ella.

+0

de acuerdo con "no tiene sentido bloquear al usuario para ordenar en una columna de la tabla seleccionada" +1 – mKorbel

+0

que está desactualizado (o más preciso: ya no existe a partir de 1.6; -) api. – kleopatra

+0

@kleopatra interestning. No estaba al tanto de este hecho. Y no pude encontrar una mejor respuesta manily debido a la dificultad de usar la página web como resultado de la migración de java.net (más como una devastación para mí :)) de proyectos. ¿Qué sugieres en su lugar, me pregunto? – Boro

1

creo que deberías echar un vistazo a TableRowSorter API y ver si JXTable soporta gustaría:

TableModel myModel = createMyTableModel(); 
JTable table = new JTable(myModel); 
table.setRowSorter(new TableRowSorter(myModel)); 

TableRowSorter tiene un método de API isSortable():

isSortable (int columna) public boolean

devuelve verdadero si la columna especificada se puede ordenar; de lo contrario, falso.

Parámetros: columna - La columna de cheque de clasificación para, en términos del modelo subyacente

Devuelve: true si la columna se puede ordenar

+0

Gracias por su respuesta. ¿Puede ayudarme a saber cómo puedo usar setSorterClass (String sorterClassName) para deshabilitar la ordenación para una columna? Puedes dar cualquier ejemplo de código Será muy útil para mí. – user711466

+0

-1 para extender un enfoque que no sea swingx'ish. No hay obligación de responder si no conoce SwingX/JXTable ;-) – kleopatra

4

SwingX soporta una propiedad se puede ordenar por columnas en el nivel de TableColumnExt.Su valor por defecto es cierto, para desactivarlo después de la creación de columna

table.getColumnExt(myColumnIndex).setSortable(false) 

O al momento de la creación, utilice una costumbre ColumnFactory, como

ColumnFactory factory = new ColumnFactory() { 

    @Override 
    public void configureTableColumn(TableModel model, TableColumnExt column) { 
     super.configureTableColumn(model, column); 
     if (... your condition to disable sortable) { 
      column.setSortable(false); 
     } 
    } 
} 
table.setColumnFactory(factory); 
table.setModel(model); 

JXTable se hará cargo de la sincronización de la propiedad de la columna a la clasificadora, siempre que sea del tipo SortController (que es el valor predeterminado)

+0

+1 Muy bien explicado y presentado cómo hacerlo. Gracias por corregirme/actualizarme. :) – Boro

Cuestiones relacionadas