SWT table updaten

Status
Nicht offen für weitere Antworten.

pymote

Aktives Mitglied
hallo,
ich lese aus einer datei informationen aus und zeige diese dann in einer swt table an. nebenbei gibt es auch die möglichkeit die tabelle zu aktualisieren da sich die daten in der datei verändern können. allerdings werden bei der aktualisierung nicht die alten table items ersetzt sondern die neuen nur drangehängt. das liegt daran dass ich beim auslesen der zeilen in der datei, pro zeile ein neues tableitem erzeuge:

Code:
fr = new FileReader("c:/test/test.csv");
lnr = new LineNumberReader(fr);
for ( String line; (line = lnr.readLine()) != null; ){

	String[] lineValues = line.split(";");
	TableItem ti = new TableItem(tableExcel, SWT.NONE);
	ti.setText(lineValues);
	
}
lnr.close();
fr.close();

muss ich für mein problem die tabelle oder sogar die shell irgendwie neu zeichnen lassen? gibt es so eine art update() funktion für tabellen/shells.
vielen dank
 
ok, wenn ich das so richtig verstanden hab,
1. muss ich anfangs ermitteln wieviele tableitems ich benötige,
2. diese dann der funktion übergeben, die mir die datei ausliest
3. und abschliessend den inhalt der tabelitems mit den werten füllen

stimmt das so?
 
Morgen,

Gut das es geklappt hat, trotzdem nochmal für die SuFu-Benutzer:

Der Ansatz ist eigentlich so, dass du eine Table hast, deren einzelne Zeilen sind TableItems. Ein TableItem wiederrum ist intern ein Vector mit 0-n Elementen, wobei n der Anzahl der Spalten entspricht. Wenn du jetzt weisst, dass du in der 5ten Zeile das Element der dritten Spalte ändern musst, schreibst du:
Code:
TableItem row = myTable.getItem(2); // 0 basiert also 3te Spalte = 5-1
row.setText(4, "der neue Text"); // 0 basiert also 5tes Element = 5-1

Du könntest auch eine Methode der Art:
Code:
public void setItem(int column, int row, String value) {
  TableItem row = myTable.getItem(column);
  row.setText(row, value);
}

Versuchen, wobei ich die hier nicht getestet hab.

Soweit ich Tables in SWT verstanden habe, gibt es keine festgelegte Grenze von Zeilen. Durch
Code:
new TableItem(Table parent, int style)
wird eine neue Zeile angelegt. Da das Parent mitgegeben wurde, ist auch klar wohin sie gehört. In deinem Fall wurde sie immer an das Ende der Tabelle angehangen, was auch so beabsichtigt ist.

Was du vorher wissen musst, bevor du auf die einzelnen Elemente eines Items zugreifst, ist die Anzahl der Spalten. Ansonsten bekommst du schon mal gerne eine IndexOutOfBoundsException.

Duch
Code:
new TableColumn(Table parent, int style)
legst du eben eine solche neue Spalte an. Das sollte auch funktionieren, wenn es schon Werte in der Tabelle gibt. So werden an die "Zeilen-Vektoren" (TableItems) ein neues leeres Element am Ende angefügt.

Das TableModel ist in SWT also etwas versteckt, um darauf zu zu greifen, musst du, wie oben beschrieben die Werte der Elemente eines Items manipulieren.
 
uhm, warum verwendet ihr denn nicht die klasse TableViewer von jface?
Dazu gibt es alles, wie bei Swing auch.. (naja, fast alles :wink: )

ITableLabelProvider
IStructuredContentProvider
usw.

Die Umsetzung funktioniert ganz einfach.
auf der eclipse seite gibts auch tutorials bzw. articles dazu.
hab jetzt leider net die Zeit für links gucken.. aba das findet ihr schon.
ansonsten post ich später noch mal links dazu....

Das mit dem TableItem hin und her ist viel zu aufwändig.. da wird
man ja nie fertig!!
😀

vielleicht ist das ja ne alternative für euch...
 
Naja, weil ich im Moment mit SWT arbeiten muss, ohne JFace, ist eine Auflage. Hatte nicht dran gedacht, dass er die nicht hat. Sonst hatte ich den TableViewer empfohlen. 😀

Hab im Moment halt Scheuklappen auf.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben