setvalueat make how example ejemplo java swing jtable abstracttablemodel

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);