Ich habe in meiner Anwendung eine JTable mit einem eigenen Table Model. Das sieht in Bruchstücken wie folgt aus:
Der JTable habe ich einen RowSorter hinzugefügt:
Bis dahin funktioniert alles wunderbar. Die Tabelle wird korrekt dargestellt und auch die Sortierung funktioniert einwandfrei. Nun habe ich einen eigenen Renderer geschrieben, der folgendes machen soll. Er soll der Checkbox in Spalte 1 ein Tooltip hinzufügen, wenn es für die gleiche Zeile eine bestimmte Meldung gibt.
Dazu versuche ich wie zu sehen ist die Error-Value aus Spalte 101 auszulesen. Das funktioniert aber nur solange ich noch nicht sortiert habe. Nach der Sortierung liefert der Aufruf tableModel.getValueAt(row, 101); immer noch den gleichen Wert zurück.
Sieht von vielleicht jemand wo der Fehler liegt?
Java:
public class CustomTableModel extends AbstractTableModel
{
private Vector headers = null;
private List dataList = null;
public CustomTableModel(List dataList, Vector headers)
{
this.dataList = dataList;
this.headers = headers;
}
public void setValueAt(Object value, int row, int col)
{
RefData line = (RefData) dataList.get(row);
if (col == 1)
{
line.setChecked((Boolean) value);
}
if (col == 12)
{
line.setOrderQuantity((Integer) value);
}
fireTableCellUpdated(row, col);
}
public Object getValueAt(int row, int column)
{
RefData line = (RefData) dataList.get(row);
switch (column)
{
case 0:
return "";
case 1:
return line.getChecked();
case 2:
return "";
case 3:
return line.getDeliveryNumber();
case 4:
return line.getRetailChain();
case 5:
return line.getCustomerNumber();
case 6:
return line.getCustomerName();
case 7:
return line.getArtist();
case 8:
return line.getTitleNumber();
case 9:
return line.getOrigTitleNumber();
case 10:
return line.getTitleName();
case 11:
return line.getStockQuantity();
case 12:
return line.getOrderQuantity();
case 13:
return line.getSourceOrderQuantity();
case 101:
return line.getError();
default:
return "";
}
}
}
Der JTable habe ich einen RowSorter hinzugefügt:
Java:
TableRowSorter sorter = new TableRowSorter(jTable.getModel());
jTable.setRowSorter(sorter);
Bis dahin funktioniert alles wunderbar. Die Tabelle wird korrekt dargestellt und auch die Sortierung funktioniert einwandfrei. Nun habe ich einen eigenen Renderer geschrieben, der folgendes machen soll. Er soll der Checkbox in Spalte 1 ein Tooltip hinzufügen, wenn es für die gleiche Zeile eine bestimmte Meldung gibt.
Java:
class ColorCellRenderer extends DefaultTableCellRenderer
{
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);
if (col == 1)
{
JCheckBox rendererComponent = new JCheckBox();
rendererComponent.setHorizontalAlignment(JCheckBox.CENTER);
if (value != null && (Boolean)value)
{
rendererComponent.setSelected(true);
}
// set error color
String error = (String) tableModel.getValueAt(row, 101);
if (error != null && error.trim().length() > 0)
{
if (error.equals("orange"))
rendererComponent.setBackground(new Color(255, 165, 0));
else
rendererComponent.setBackground(new Color(255, 0, 0));
rendererComponent.setToolTipText((String)tableModel.getValueAt(row, 102));
ToolTipManager tm = ToolTipManager.sharedInstance();
tm.setInitialDelay(0);
tm.registerComponent(rendererComponent);
setDefaulColor = false;
isBackground = true;
}
comp = rendererComponent;
}
return comp;
}
}
Dazu versuche ich wie zu sehen ist die Error-Value aus Spalte 101 auszulesen. Das funktioniert aber nur solange ich noch nicht sortiert habe. Nach der Sortierung liefert der Aufruf tableModel.getValueAt(row, 101); immer noch den gleichen Wert zurück.
Sieht von vielleicht jemand wo der Fehler liegt?