T
triopsfreak
Gast
Ich habe folgendes Problem:
Ich habe eine JList mit einem selbstgeschriebenen ListModel, das von AbstractListModel erbt. Die Werte kommen aus einer ArrayList, das funktioniert auch alles. Die ArrayList, die die Daten enthält wird bei jedem Tastenschlag in ein JTextField neu überprüft, fungiert also als Filter. Das funktioniert auch gut so, doch sobald ich der Liste, die alle Einträge enthält etwas hinzufüge funktioniert es nicht mehr. Die Methode getSize() wird noch aufgerufen, dort gebe ich die Grösse der filtrierten Liste zurück. Doch die Methode getElementAt() wird nicht mehr aufgerufen! Inzischen habe ich herausgefunden, dass das jedesmal der Fall ist, wenn die Grösse der sortierten Liste grösser ist als die Grösse der unsortierten bevor ich etwas hinzugefügt habe, ist die sortierte Liste kleiner geht alles!
Hier noch als Code, damit es ein bisschen einfacher ist, ich kann mich einfach nicht kurz fassen
Das ListModel:
Hier die Methode um etwas hinzuzufügen und die Filtermethode:
Inzwischen habe ich noch ein zweites Problem, die unteren Einträge werden verstückelt, man sieht nur einen kleinen Ausschnitt vom Text!!
Ich habe eine JList mit einem selbstgeschriebenen ListModel, das von AbstractListModel erbt. Die Werte kommen aus einer ArrayList, das funktioniert auch alles. Die ArrayList, die die Daten enthält wird bei jedem Tastenschlag in ein JTextField neu überprüft, fungiert also als Filter. Das funktioniert auch gut so, doch sobald ich der Liste, die alle Einträge enthält etwas hinzufüge funktioniert es nicht mehr. Die Methode getSize() wird noch aufgerufen, dort gebe ich die Grösse der filtrierten Liste zurück. Doch die Methode getElementAt() wird nicht mehr aufgerufen! Inzischen habe ich herausgefunden, dass das jedesmal der Fall ist, wenn die Grösse der sortierten Liste grösser ist als die Grösse der unsortierten bevor ich etwas hinzugefügt habe, ist die sortierte Liste kleiner geht alles!
Hier noch als Code, damit es ein bisschen einfacher ist, ich kann mich einfach nicht kurz fassen
Das ListModel:
Java:
class ListModel extends AbstractListModel {
List<Object> filteredList = new ArrayList<Object>();
@Override
public Object getElementAt(final int index) {
// Das hier hingegen nur, wenn die Liste kleiner oder gleich gross ist,
// wie bevor ich einen Eintrag hinzugefügt habe!
return filteredList.get(index);
}
@Override
public int getSize() {
// Das hier wird immer aufgerufen, egal wie gross die Liste ist!
return filteredList.size();
}
}
Java:
public void addEntry(final Object value){
unfilterdList.add(value);
refilter(filter.getText());
}
void refilter(String titel) {
filteredList.clear();
final String filter = titel;
if (filter.isEmpty()) {
filteredList.addAll(unfilterdList);
entrys.repaint();
return;
}
for (final Object ent : unfilterdList)
if (ent.toString().toLowerCase().contains(filter))
filteredList.add(ent);
entrys.repaint();
}
Zuletzt bearbeitet von einem Moderator: