Hallo....
Ich habe ein Programm geschrieben, dass etwas durchsucht (ArrayLists). Als Ergebnis erhält man eine ArrayList. Diese wird dann im Fenster (in einer Tabelle) dargestellt, allerdings erst, wenn alle Suchergebnisse gefunden wurden.
Das will ich ändern: die Suche soll im Hintergrund laufen, und die Tabelle soll schon alle bisher gefundenen Ergebnisse darstellen. Nun frage ich mich (und euch), wie man das am besten macht. Ich habe schon an Threads gedacht, bin
aber auf diesem Gebiet nicht so bewandert und weiß nicht, wo ich da ansetzen soll.
Vielleicht mal etwas zur Programmstruktur:
Es gibt eine Gui Klasse.
Diese ruft (nach Klick auf den Suchen-Button) die Methode search einer anderen Klasse auf
und übergibt Suchkriterien (Arrays). Diese andere Klasse sucht nun die Ergebisse und speichert
diese nach und nach in eine ArrayList. Am Ende der Suche wird diese zurückgegeben und von
der Gui Klasse an die Tabelle geschickt.
Hier mal Auszüge aus dem Code:
In der GUI Klasse:
In der SuchService Klasse:
Die Gui Klasse soll also merken, wenn ein weiteres Suchergebnis gefunden wurde
und ihre Tabelle aktualisieren.
Vielleicht fällt euch was ein.
Danke,
Jacqui.
Ich habe ein Programm geschrieben, dass etwas durchsucht (ArrayLists). Als Ergebnis erhält man eine ArrayList. Diese wird dann im Fenster (in einer Tabelle) dargestellt, allerdings erst, wenn alle Suchergebnisse gefunden wurden.
Das will ich ändern: die Suche soll im Hintergrund laufen, und die Tabelle soll schon alle bisher gefundenen Ergebnisse darstellen. Nun frage ich mich (und euch), wie man das am besten macht. Ich habe schon an Threads gedacht, bin
aber auf diesem Gebiet nicht so bewandert und weiß nicht, wo ich da ansetzen soll.
Vielleicht mal etwas zur Programmstruktur:
Es gibt eine Gui Klasse.
Diese ruft (nach Klick auf den Suchen-Button) die Methode search einer anderen Klasse auf
und übergibt Suchkriterien (Arrays). Diese andere Klasse sucht nun die Ergebisse und speichert
diese nach und nach in eine ArrayList. Am Ende der Suche wird diese zurückgegeben und von
der Gui Klasse an die Tabelle geschickt.
Hier mal Auszüge aus dem Code:
In der GUI Klasse:
Code:
private void performSearch()
{
// ......
// search - Hier passiert die eigentlich Suche
resultItems = searchService.searchDoitItem(currentFilter, selectedSortItems);
// ...Tabelle wird vorbereitet....
// ....
// Ergebnisse werden dem TableModel übergeben
resultTableModel.setResultItems(resultItems);
//....
}
In der SuchService Klasse:
Code:
public ArrayList<ResultItem> searchDoitItem(ArrayList<Filter> searchFilters, ArrayList<SortItem> sortItems)
{
// ... Initialisierungen, etc.....
Iterator<String> it = p.iterator();
while(it.hasNext())
{
String id = it.next();
String type = getType(id);
// if no filters are set, show all
if (searchFilters.size() == 0)
{
// Hier wird ein Suchergebnis hinzugefügt !!!
results.add(getResultItemById(id, sortItems, type));
}
else
{
// Hier wird ein Suchergebnis hinzugefügt !!!
if (checkNodeByAllFilters(id, searchFilters, type))
results.add(getResultItemById(id, sortItems, type));
}
}
return results;
}
Die Gui Klasse soll also merken, wenn ein weiteres Suchergebnis gefunden wurde
und ihre Tabelle aktualisieren.
Vielleicht fällt euch was ein.
Danke,
Jacqui.