Ich versuche, einige Elemente in meiner Tabelle auszuwählen, aber ich möchte nicht, dass sie aufgedeckt werden. Das Problem ist, dass beim Aufruf der Methode (siehe unten) automatisch showSelected()
innerhalb von Table.class
aufgerufen wird, und das ist nicht was ich will.Wie kann ich die Auswahl für eine swt-Tabelle mit setSelection festlegen und die Einstellung layer auf false setzen?
tableViewer.getTable().setSelection(lastSelectedIndices);
Ich habe versucht, die Auswahl Einstellung Tableviewer verwenden, aber aus irgendeinem Grund hat es ex nicht: tableViewer.setSelection(new StructuredSelection (lastSelectedIndices), false);
diese Codezeile verursacht nicht alles ausgewählt werden.
Kann ich trotzdem die Tabellenzeilen auswählen und sie NICHT anzeigen lassen? In meinem System muss ich jedes Mal, nachdem das Raster aktualisiert wurde, setSelection
aufrufen, damit der Benutzer sein ausgewähltes Element nicht verliert. Das Problem tritt auf, wenn der Benutzer das Raster nach unten scrollt -> wenn zu diesem Zeitpunkt eine Aktualisierung stattfindet, springt das Raster zurück zu den ausgewählten Elementen. Es sieht wirklich komisch aus, wenn der Benutzer einen Tisch runterscrollt und die Bildlaufleiste plötzlich nach oben springt.
Jede Hilfe wird sehr geschätzt!
--code für den Tisch nach oben -
// add table viewer
tableViewer = new TableViewer(this, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL);
tableViewer.setUseHashlookup(true);
tableViewer.addFilter(new GridPanelViewerFilter());
tableViewer.setComparator(new GridPanelViewerComparator());
tableViewer.setComparer(new GridPanelElementComparer());
table = tableViewer.getTable();
GridData tableGd = new GridData(SWT.FILL, SWT.FILL, true, true);
table.setLayoutData(tableGd);
table.setHeaderVisible(true);
table.setLinesVisible(true);
// set table font
setTableFont();
// listen to paint events for anti aliasing
table.addPaintListener(...etcetc
--- Code für die Tabelle erfrischend -
protected void refreshGrid() {
if(!updateGrid) return;
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
// check if disposed
if (isDisposed()) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Grid already disposed"));
return;
}
// refresh table
table.setRedraw(false);
try {
// get last selected indices from mouse down event
tableViewer.refresh(true, false);
if(lastSelectedIndices != null){
tableViewer.getTable().deselectAll();
tableViewer.getTable().select(lastSelectedIndices);
}
} catch (Exception e) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
getClass().getName() + ": " + "Error at refresh table", e));
}
table.setRedraw(true);
// process post grid refresh
postGridRefresh();
} catch (Exception e) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Error during refresh grid", e));
}
}
});
}
Ich habe TableViewer.refresh() und TableViewer.setUseHashlookup (true) verwendet, aber die Auswahl bleibt nicht erhalten. Ich habe die von Ihnen vorgeschlagene Zeile versucht, Table.select (Indizes), aber es führt immer noch zu der Tabelle Indizes. Interessanterweise ruft diese Methode showSelection() nicht innerhalb von Table.class auf (im Gegensatz zu setSelection). Denkst du, dass eine andere Klasse/Code die Auswahl offenlegt? – codegurl