Combobox mit Autocomplete-Funktion

tanechka

Bekanntes Mitglied
Hallo zusammen,

ich benutze in meinem Combobox eine Autocomple-Funktion:
Code:
Composite composite = new Composite(parent, SWT.Border);
ComboViewer viewer = new ComboViewer(composite, SWT.DROP_DOWN);
viewer.add(new Object[]{aitem,bitem,citem,aitem2,etc});
Combo combo = viewer.getCombo();
new AutoCompleteField(combo, new ComboContentAdapter(), combo.getItems();
Die Funktion arbeitet wie erwartet. Mein Problem, dass ich nicht weiß, wie ich auf das selektierte Element komme.
Ich habe schon damit versucht:
Code:
combo.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                ISelection selection = viewer.getSelection();
                if (selection instanceof IStructuredSelection && !selection.isEmpty()) {

                    IStructuredSelection strucSel = (IStructuredSelection) selection;
                    MeinElement selectedElement = (MeinElement ) strucSel.getFirstElement();
                  
                }
            }
        });
Leider die Selection hat Null Elemente. Gibt es ein Weg wie man auf das Objekt in der Liste kommt?

Danke
 
Ohne den Quellcode der Klassen Combo, AutoComplete und eventuell ComboViewer kann man nur raten.

AutoCompleteField scheint aber dem Namen nach dafür zuständig zu sein, zu erkennen, ob die Eingabe einem Eintrag entsprechen kann. So wie es scheint, erkennt AutoComplete nur, setzt aber nicht (was auch durchaus vernünftig ist, während man noch am Eingeben ist). Während der Erkennung ist ja klar, welches Item in der Liste als erstes den Kriterien entspricht. Setze dort an.
 
Die Klassen Combo, AutoComplete,ComboViewer sind die öffentlichen SWT-Klassen. Die AutoComplete-Klasse funktioniert und findet den Proposal. Mein Problem ist, dass der Aufruf viewer.getCombo().getSelectionIndex() eine -1 liefert.
 
Ich habe schon versucht den Proposal zu selektieren:
Code:
    viewer.getCombo().addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                
                 Rectangle bounds = viewer.getCombo().getBounds();
                    Point point = new Point(bounds.x, bounds.x + bounds.width);
                    viewer.getCombo().setSelection(point);
            }
        });
aber der Text wurde nicht selektiert
 
Ich glaube das kannst du über

Java:
ComboViewer viewer = new ComboViewer(composite, SWT.DROP_DOWN);
ISelection selection = viewer.getSelection();
if(selection instanceOf IStructuredSelection ss){
    if(ss.getFirstElement() != null){
         // Das selektierte von der combo box
        Object result = ss.getFirstElement() ;
    } 
}

Bitte nur als Pseudocode betrachten. Ich habe ohne IDE das abgetippt.
 
Wenn ich in dem Combo etwas auswähle, würde dieser Weg funktionieren. Der AutoComplete-Eintrag gilt nicht als Selection, habe ich den Eindruck.
 
Wenn ich in dem Combo etwas auswähle, würde dieser Weg funktionieren. Der AutoComplete-Eintrag gilt nicht als Selection, habe ich den Eindruck.
Das ist richtig, das wäre auch nicht gut, vor allem, wenn mehrere Elemente dem bisher eingetippten entsprechen.
Mit Eclipse SWT hab ich bisher noch nicht gearbeitet. Eventuell hat AutoComplete eine Property, über die man steuern kann, ob Elemente während des Eintippens ausgewählt werden sollen. Oder kannst du an AutoComplete noch irgendwelche Listener dranhängen?
Schlimmstenfalls musst du die Methode überschreiben und erweitern.
 

Zurück
Oben