Rinfrescare jtable quando setautocreatewowster è vero
-
29-10-2019 - |
Domanda
Ho scritto una tabella predefinita rendering come segue:
public class CustTableRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
try {
Object cellObj = table.getModel().getValueAt(row, 7);
double cellValue = (Double) cellObj;
if (cellValue < 0) {
comp.setBackground(new Color(255, 48, 48));
} else if (cellValue == 0) {
comp.setBackground(new Color(173, 255, 47));
} else {
comp.setBackground(Color.white);
}
if (isSelected) {
comp.setBackground(new Color(71, 60, 139));
TableModel model = table.getModel();
}
} catch (Exception e) {
e.printStackTrace();
}
return comp;
}
}
.
Per evidenziare le righe che contengono i valori negativi della colonna 7, ho anche impostato setAutoCreateRowSorter
in true
.Il mio problema è quando faccio clic su un'intestazione per ordinare in base alla tabella IT viene ordinata ma la riga evidenziata non viene modificata, quindi è evidenziata una riga errata.
Come ridisegnare il tavolo quando è ordinato?
Soluzione
Le coordinate passate nel rendering sono in visualizzazione del sistema di coordinate, è necessario convertirle per modellare le coordinate prima di accedere al modello:
int modelRow = table.convertRowIndexToModel(row);
int modelColumn = table.convertColumnIndexToModel(column);
cellObject = table.getModel().getValueAt(modelRow, modelColumn);
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow