SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer)

Hallo,

wenn ich eine bestimmte Zeile in einem
Code:
TableViewer
(SWT) markiere, bekomme ich den Index dieser Stelle mit
Code:
tableViewer.getSelectionIndex()
. Der ist entweder -1, falls keine Zeile markiert/ausgewählt wurde oder der Index, angefangen bei 0.

Frage: Wie kann ich nun auf den Inhalt dieser Zeile zugreifen?

Weitere Frage, die ähnlich der obigen ist. Wie kann ich bei einem
Code:
ListDialog
auf den Inhalt des markierten / ausgewählten Elements zugreifen?
 
Zuletzt bearbeitet von einem Moderator:
Ein Schritt schonmal getan. Mit
Code:
tabl.getItem(table.getSelectionIndex()).getText()
komme ich bei einem
Code:
Table
in einem
Code:
TableViewer
an das jeweilige Element. Perfekt.

Nun: wie komme ich an das markierte/ausgewählte Element bei einem
Code:
ListDialog
?
 
Zuletzt bearbeitet:
Gebe es doch nur ein Dienst im Internet, welcher es erlaubt nach Informationen zu suchen... Moment... Let me google that for you
Und die erste Seite liefert dir direkt eine Antwort. Darüber hinaus sollte man schon die Doku lesen und sich die Methoden angucken, die zur Verfügung stehen.
 
Von Google habe ich schon mal etwas gehört und sogar bedient. Auch die Doku habe ich mir angesehen, aber welche der Methoden kommt denn nun für mich in Frage? Ich sehe da auf Anhieb keine, die mich weiterbringt.
 
Es gibt kein
Java:
getSelectionIndex()
für den Jface TableViewer. Auf den Inhalt bestimmter Elemente kannst du so zugreifen:

Java:
tableViewer.getTable().getItem(int index).getData();

Das ganze musst du dann noch ins jeweilige Objekt, das das Item repräsentiert casten und fertig.
Insachen Selection ist Vorsicht geboten. Das ist teilweise verbuggt und funktioniert nur, wenn beim erstellen des Viewers
Java:
SWT.FULL_SELECTION
gewählt ist. Sonst schaut er bspw. für
Java:
table.getItem(Point pt)
nur in die erste Spalte.
 
So ein ähnliches Problem hatte ich auch schon mal und folgende Lösung dann entwickelt. Der Vorteil bei der Geschichte ist, dass man den genauen Eintrag bekommt, es kann ja vor kommen das man mehr als eine Spalte in der Tabelle hat.

Java:
final Table tab = tableViewer.getTable();
        Rectangle clientArea = parent.getClientArea();
        tab.setLocation(clientArea.x, clientArea.y);
        org.eclipse.swt.graphics.Point size = tab.computeSize(SWT.FILL, SWT.FILL);
        tab.setSize(size);
        
        tab.addListener(SWT.MouseDown, new Listener()
        {
            
            public void handleEvent(Event event)
            {
                org.eclipse.swt.graphics.Point pt = new org.eclipse.swt.graphics.Point(event.x, event.y);
                TableItem item = tab.getItem(pt);
                if (item == null)
                    return;
                int currentColumn;
                for (currentColumn = 0; currentColumn < 4; currentColumn++) {
                    Rectangle rect = item.getBounds(currentColumn);
                    if (rect.contains(pt)) {
                        int index = tab.indexOf(item);
                        System.out.println("Item " + index + "-" + currentColumn);
                        // An dieser Stelle kann man Aktionen starten, wenn auf ein bestimmtes Feld eine gewisse Reaktion erwartet wird.
                    }
                }
            }
        });

gruß
Mad
 

Neue Themen


Zurück
Oben