Hallo,
zuallererst möchte ich anmerken, dass ich mich bereits ausführlich mit Google beschäftigt habe,
aber trotzdem bis jetzt leider keine Lösung finden konnte.
Mein Problem schaut wie folgt aus:
Meine JTable dient zur Darstellung von Datensätzen auf mobilen Touch-Terminals.
Zeilenweise müssen diese ausgewählt werden können, sowohl im Single- als auch Multiselect.
Um das Ganze anwenderfreundlich zu halten, ist meine Selektion jetzt zum togglen aufgebaut,
sprich ein Klick auf eine unselektierte Zeile und sie wird selektiert, ein Klick auf eine selektierte Zeile und
die Selektion wird wieder aufgehoben. Das funktioniert soweit auch, nur musste ich dazu ein eigenes
ListSelectionModel implementieren... und hier ist der Wurm drin, denke ich. Eine weitere Anforderung
sorgt jetzt dann für Probleme: Die Sortierung nach den Columns.
Solange die JTable auf Singleselect gestellt ist, funktioniert auch die Übertragung der Indizes der View
in das Model ohne Probleme. Beim Multiselect wird es dann allerdings fehlerhaft, obwohl ich hierbei im
Prinzip exakt das gleiche tue, wie beim Singleselect.
Das hier ist mein Ansatz für die Einzelselektion:
Hier wird auch alles korrekt aus der View in das Model übernommen. Beim Multiselect benutze ich
nur zusätzlich eine foreach-Schleife, die alle Einträge in table.getSelectedRows() durchgeht und führe
dann das gleiche aus, wie das, das ich oben gepostet habe. Allerdings funktioniert es hier nicht.
Das zweite Problem ist dann, dass ich keine Lösung dafür habe, die Selektion nach der Übertragung
ins Model korrekt auf der View darzustellen. Sprich, wenn bereits etwas selektiert war und dann soll
sortiert werden, dann bleibt die Selektion auf dem gleichen Index der View stehen, trotz convert-
Methoden vom Model-Index zum View-Index.
Es tut mir Leid, dass ich nicht mehr Code posten kann. Es geht hierbei jedoch um kein Privatprojekt und deshalb würde ich mich wohler fühlen, so wenig wie möglich preiszugeben, egal, wie trivial
diese Codebausteine auch sein mögen. Dafür bitte ich um Verständnis. Allerdings erwarte ich auch
keinen Code zum kopieren von den Leuten, die bereit sind, mir zu helfen. Kleine Anregungen, was ich
übersehen oder vergessen habe, wären schon nett - ich bin nämlich mittlerweile fast schon am
ausrasten wegen dem Problem hier :autsch:
So eine Kleinigkeit... und ich krieg es einfach nicht auf die Reihe
zuallererst möchte ich anmerken, dass ich mich bereits ausführlich mit Google beschäftigt habe,
aber trotzdem bis jetzt leider keine Lösung finden konnte.
Mein Problem schaut wie folgt aus:
Meine JTable dient zur Darstellung von Datensätzen auf mobilen Touch-Terminals.
Zeilenweise müssen diese ausgewählt werden können, sowohl im Single- als auch Multiselect.
Um das Ganze anwenderfreundlich zu halten, ist meine Selektion jetzt zum togglen aufgebaut,
sprich ein Klick auf eine unselektierte Zeile und sie wird selektiert, ein Klick auf eine selektierte Zeile und
die Selektion wird wieder aufgehoben. Das funktioniert soweit auch, nur musste ich dazu ein eigenes
ListSelectionModel implementieren... und hier ist der Wurm drin, denke ich. Eine weitere Anforderung
sorgt jetzt dann für Probleme: Die Sortierung nach den Columns.
Solange die JTable auf Singleselect gestellt ist, funktioniert auch die Übertragung der Indizes der View
in das Model ohne Probleme. Beim Multiselect wird es dann allerdings fehlerhaft, obwohl ich hierbei im
Prinzip exakt das gleiche tue, wie beim Singleselect.
Das hier ist mein Ansatz für die Einzelselektion:
Java:
// this == DefaultListSelectionModel
this.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
// getOwner() == JTable (Standard Java-Klasse, keine Klasse, die JTable beerbt)
if (!(getOwner().getSelectedRow() < 0)) {
int modelRow = getOwner().convertRowIndexToModel(getOwner().getSelectedRow());
System.out.println(String.format("Selected Row in view: %d. " + "Selected Row in model: %d.", getOwner().getSelectedRow(), modelRow));
System.out.println();
}
// nur, um sicher zu gehen, dass die JTable alles auch korrekt anzeigt.
getOwner().revalidate();
getOwner().repaint();
}
});
Hier wird auch alles korrekt aus der View in das Model übernommen. Beim Multiselect benutze ich
nur zusätzlich eine foreach-Schleife, die alle Einträge in table.getSelectedRows() durchgeht und führe
dann das gleiche aus, wie das, das ich oben gepostet habe. Allerdings funktioniert es hier nicht.
Das zweite Problem ist dann, dass ich keine Lösung dafür habe, die Selektion nach der Übertragung
ins Model korrekt auf der View darzustellen. Sprich, wenn bereits etwas selektiert war und dann soll
sortiert werden, dann bleibt die Selektion auf dem gleichen Index der View stehen, trotz convert-
Methoden vom Model-Index zum View-Index.
Es tut mir Leid, dass ich nicht mehr Code posten kann. Es geht hierbei jedoch um kein Privatprojekt und deshalb würde ich mich wohler fühlen, so wenig wie möglich preiszugeben, egal, wie trivial
diese Codebausteine auch sein mögen. Dafür bitte ich um Verständnis. Allerdings erwarte ich auch
keinen Code zum kopieren von den Leuten, die bereit sind, mir zu helfen. Kleine Anregungen, was ich
übersehen oder vergessen habe, wären schon nett - ich bin nämlich mittlerweile fast schon am
ausrasten wegen dem Problem hier :autsch:
So eine Kleinigkeit... und ich krieg es einfach nicht auf die Reihe