Hallo zusammen,
ich habe gerade versucht oben genanntes (siehe Threadname) zu Verbinden, wie ich es schon bei Tabellen mache.
ich habe also eine ComboViewer, einen ViewerFilter (fragt mich nicht mehr, woher ich das hatte, es gerade so zu programmieren - war nen Tutorial)
in einem KeyListener (genaugenommen KeyDown) wolte ich nun folgendes machen:
irgendwas passiert auch, aber nicht das, was ich erwartet habe:
Meine Eingabe wird bis auf ein Zeichen gelöscht, ab und an verändert sich was am dargestellten Inhalt des Viewers, aber von einem wirklichen filtern kann man nicht sprechen.
Meine Frage: Hat jemand da einen *funktionierenden* Filter gebaut und wenn ja, wie genau? (Codebeispiel?)
Danke schon mal!
ich habe gerade versucht oben genanntes (siehe Threadname) zu Verbinden, wie ich es schon bei Tabellen mache.
ich habe also eine ComboViewer, einen ViewerFilter (fragt mich nicht mehr, woher ich das hatte, es gerade so zu programmieren - war nen Tutorial)
Code:
private class SimpleViewerFilter extends ViewerFilter {
private Pattern pattern;
public SimpleViewerFilter() {
pattern = Pattern.compile(".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean select(Viewer viewer, Object parentElement,
Object element) {
boolean select = true;
// do nothing with the parentElement at the moment
} else if (element instanceof Location) {
select = pattern.matcher(((Location) element).getToken())
.matches();
}
return select;
}
public void setFilter(Object element) {
if (element instanceof String) {
pattern = getPatternByString((String) element);
}
}
private Pattern getPatternByString(String patternString) {
String newText = patternString + "*";
newText = newText.replace("\\", "\\\\");
newText = newText.replace(".", "\\.");
newText = newText.replace("*", ".*");
newText = newText.replace("?", ".?");
return Pattern.compile(newText, Pattern.CASE_INSENSITIVE);
}
}
in einem KeyListener (genaugenommen KeyDown) wolte ich nun folgendes machen:
Code:
String entry = myCombo.getText();
if (entry != null && !entry.isEmpty()) {
search.setFilter(entry);
myComboViewer.refresh(false);
}
irgendwas passiert auch, aber nicht das, was ich erwartet habe:
Meine Eingabe wird bis auf ein Zeichen gelöscht, ab und an verändert sich was am dargestellten Inhalt des Viewers, aber von einem wirklichen filtern kann man nicht sprechen.
Meine Frage: Hat jemand da einen *funktionierenden* Filter gebaut und wenn ja, wie genau? (Codebeispiel?)
Danke schon mal!