Hi,
ich stehe gerade komplett auf dem Schlauch: Ich habe eine JTable, bei der mittels eines TableRowSorters gefiltert wird, d. h. es wird nicht das ganze Model dargestellt, sondern nur die in Frage kommenden Zellen. Jetzt möchte ich herausbekommen, welche Zeile selektiert wurde. Den Index zu erhalten ist ganz einfach, aber dieser korrespondiert ja nun nicht mehr mit dem Datenmodell. Wie komme ich an die Werte heran, die tatsächlich gerade in der gefilterten Tabelle dargestelt werden?
Ich habe einen SelectionListener, der meldet, wenn eine Zeile selektiert wurde:
Dann noch die Methode zum Filtern:
Das Datenmodell wurde jetzt vermutlich ein bisschen zu viel sein. Nur so viel: Es gibt 4 Zellen, nämlich ID, Nachname, Vorname und Geburtstag. Die ID ist allerdings versteckt. Die ID einer Person wäre also in der Zeile verfügbar.
Vielen Dank für Hilfe,
Guybrush
ich stehe gerade komplett auf dem Schlauch: Ich habe eine JTable, bei der mittels eines TableRowSorters gefiltert wird, d. h. es wird nicht das ganze Model dargestellt, sondern nur die in Frage kommenden Zellen. Jetzt möchte ich herausbekommen, welche Zeile selektiert wurde. Den Index zu erhalten ist ganz einfach, aber dieser korrespondiert ja nun nicht mehr mit dem Datenmodell. Wie komme ich an die Werte heran, die tatsächlich gerade in der gefilterten Tabelle dargestelt werden?
Ich habe einen SelectionListener, der meldet, wenn eine Zeile selektiert wurde:
Java:
class SelectionListener implements ListSelectionListener {
JTable table;
SelectionListener(JTable table) {
this.table = table;
}
public void valueChanged(ListSelectionEvent e) {
if (e.getSource() == table.getSelectionModel()) {
int[] selection = table.getSelectedRows();
if(selection.length==0)
return;
//Stelle Person der ersten selektierten Zeile dar
long id = (Long)table.getRowSorter().getModel().getValueAt(selection[0], 0);
displayPerson(id);
}
}
}
Dann noch die Methode zum Filtern:
Java:
private void setRowFilter(final String text) {
table.setRowSorter(null);
final String t = text.toLowerCase();
RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
@SuppressWarnings("unchecked")
public boolean include(Entry entry) {
String remark = ((String) entry.getValue(1) + " "
+ (String) entry.getValue(2) + " " + (String) entry.getValue(3)).toLowerCase();
return remark.indexOf(t) > -1;
}
};
sorter = new TableRowSorter<TableModel>(table.getModel());
sorter.setRowFilter(filter);
table.setRowSorter(sorter);
}
Das Datenmodell wurde jetzt vermutlich ein bisschen zu viel sein. Nur so viel: Es gibt 4 Zellen, nämlich ID, Nachname, Vorname und Geburtstag. Die ID ist allerdings versteckt. Die ID einer Person wäre also in der Zeile verfügbar.
Vielen Dank für Hilfe,
Guybrush