make - jtable java
JTable Clickable Column Sorting: ¿Ordenar el contenido de las celdas, pero no actualiza el formato de las celdas? (2)
Puede habilitar la clasificación de tablas haciendo clic en el encabezado usando este table.setAutoCreateRowSorter(true);
Para obtener más información, visite este sitio http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know
Tengo una JTable
configurable configurada para usar una extensión personalizada de AbstractTableModel
. Sin embargo, algunos de los comportamientos de esta tabla son los que esperaba, y me encantaría recibir algunos consejos sobre cómo resolver esto.
Tengo el JTable configurado para ser ordenable usando:
thisJTable.setAutoCreateRowSorter(true);
Esto me permite ordenar la tabla haciendo clic en los encabezados de columna como se esperaba.
Sin embargo, encuentro que cuando ordeno la tabla haciendo clic en los encabezados de las columnas, el formato (color de fondo y de primer plano) de mis filas no se ordenan también.
Había configurado esas filas para que estuvieran codificadas por colores en función de los valores que contienen. Cuando ordeno por encabezado de columna, el formato en el NÚMERO de una fila dada se mantiene igual (aunque el contenido que estaba previamente en esa fila se movió).
El color de la fila se establece anulando la llamada de prepareRenderer
predeterminada para JTable:
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(row));
c.setForeground(thisModel.getRowForeColor(row));
return c;
}
};
¿Hay una forma mejor / diferente de abordar esto?
¿Debería estar usando un método diferente para hacer mi representación, un método que actualizaría la representación de la JTable en una ordenación?
¿O quiero estudiar escribir mi propio método de clasificación?
Solución (Gracias mKorbel!)
Pensé que publicaría mi solución, ya que tenía que jugar con esto un poco, ya que no estaba seguro de si el nuevo índice se pasaría también a prepareRenderer.
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
int viewIdx = row;
int modelIdx = convertRowIndexToModel(viewIdx);
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(modelIdx));
c.setForeground(thisModel.getRowForeColor(modelIdx));
return c;
}
};
Tienes que convertir el índice de filas de Vista al Modelo
int modelRow = convertRowIndexToModel(row);