SWT: Tabelle filtern und Redraw

  • Themenstarter Themenstarter Tobias Köhler
  • Beginndatum Beginndatum
T

Tobias Köhler

Hallo. Habe ein Performance-Problem:
Ich hole mir eine Excel-Liste, schreibe diese Daten in ArrayLists(Tabelle - Zeile - Zellen: ArrayList<ArrayList<String>>) und erzeuge dann TableItems.... alles kein Problem.
Nun will ich diese Tabelle filtern, dabei kann es passieren, dass in einigen Spalten auf einmal nix mehr steht. Das Filtern an sich ist schnell, aber dann kommt die Methode, die prüfen soll, ob in diesen Spalten Inhalt ist. Zuerst wird für jede Spalte ein pack() durchgeführt(Gibt es da auch was schnelleres? Das macht schon viel Last aus.)
Wenn Inhalt, dann soll er in die nächste Spalte springen. Wenn kein Inhalt in der gesamten Spalte, dann soll er die Breite auf 0 setzen. Und das dauert nun seeeehr lange...
Hier mal die Methode:
Java:
/**
* Überprüft, ob eine Spalte Inhalt hat.
* Wenn false, dann wird die Breite dieser Spalte auf 0 gesetzt.
*/
public static void checkContentAvailable()
{
	boolean isContentAvailable = false;
	for(int i=0; i<table.getColumnCount(); i++)					
		column[i].pack();				
	for(int i=0; i<table.getColumnCount(); i++)
	{
		for(int j=0; j<table.getItemCount(); j++)
		{
			if(!table.getItem(j).getText(i).equals(""))
			{
				isContentAvailable = true;
				break;
			}
		}
		if(!isContentAvailable)			
			table.getColumn(i).setWidth(0);			
		else
			isContentAvailable=false;
	}
}
 
Ich nehme mal an dass das table.getItem(j) ziemlich viel Zeit verschlingt. Versucht doch mal über table.getItems zu iterieren.

Eventuell nützt es auch in der äußeren for-Schleife über die Zeilen und darin über die Spalten zu iterieren. Dann müsstest du dir allerdings für jeden Spalte nen boolean Array machen wo du dir merkst ob die Spalte Inhalt hat.
 
Hallo,

wenn man JFace verwendet anstatt sich mit SWT direkt herumzuplagen kann man solche Aufgaben ganz einfach erledigen. Dadurch das man bei JFace über einen entsprechenden ContentProvider an die Modeldaten herankommt, kann man solche Überprüfungen ganz schnell direkt über das dahinterliegende Model erledigen. Das geht viel schneller als der "Umweg" über die SWT Table items und ist bei weitem nicht so fummelig / fehleranfällig.

wer für Tables / Trees SWT direkt ohne komfortables JFace benutzt ist selber schuld...

Gruß Tom
 
Na dann werde ich mir wohl mal JFace angucken.... dabei war ich grad froh, dass ich mit SWT ganz gut klar komme:(^^
Ist der Einstieg schwer?
 
Ohje, irgendwie macht mir JFace ganz schön Probleme... Wie genau muss ich das denn anstellen? Wie kann ich mit JFace auf meine TableItems zugreifen bzw auf deren Inhalt? Hab wohl irgendwie nen Brett vorm Kopf momentan^^
 
Zurück