2017-04-27 1 views
2

Ich habe zwei Probleme:Codename ein - autocompletetextfield getitem ausgewählt

1) Zuerst möchte ich eine Karte in AutoCompleteTextField exactlly in DefaultListModel hinzuzufügen und nachdem ich die die Listmodel in meinem autocompletetextField

2 hinzufügen möchten) Wie kann ich den Text erhalten, wenn ich ein Element in AutoCompleteTextField auswähle?

Form hi = new Form("Auto Complete", new BoxLayout(BoxLayout.Y_AXIS)); 
     AutoCompleteTextField ac = new AutoCompleteTextField("Short", "Shock", "Sholder", "Shrek0", "3asna", "niazra"); 
    ac.setMinimumElementsShownInPopup(5); 
    //final DefaultListModel<Map<String,Object>> options = new DefaultListModel<>(); 
    final DefaultListModel<String> options = new DefaultListModel<>(); 

    AutoCompleteTextField an = new AutoCompleteTextField(options); 
    hi.add(an); 
    ac.addListListener(a -> { 
     List<Object> ls = new List<>(); 
     System.out.println("i want to display the text selected"); 

    }); 
    hi.add(ac); 
    hi.show(); 

Antwort

2

Wenn Sie ein Element in dem Vorschlag Feld eines AutoCompleteTextField der Text dieser Option auszuwählen den TextField- Teil des AutoCompleteTextfield kopiert wird, aber dies erst nach dem Listevent auftreten.

Um dieses Verhalten zu haben, lieber eine Auswahl Listener auf dem DefaultListModel mit:

Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS)); 

    DefaultListModel<String> defList = new DefaultListModel<>("Red", "Green", "Blue", "Orange"); 
    AutoCompleteTextField tf1 = new AutoCompleteTextField(defList); 

    defList.addSelectionListener((oldid, newid)-> Log.p(defList.getItemAt(newid))); 

    hi.add(tf1); 
    hi.show(); 

Ich weiß nicht, warum es zwei Mal auftreten, nachdem die Form zeigte, aber es funktioniert nach völlig in Ordnung.

Edit: Wenn Sie den Text auf dem Bildschirm angezeigt werden soll, müssen Sie etwas wie folgt verwenden:

Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS)); 

    Label text = new Label("Selected text"); 

    DefaultListModel<String> defList = new DefaultListModel<>("Red", "Green", "Blue", "Orange"); 
    AutoCompleteTextField tf1 = new AutoCompleteTextField(defList); 

    defList.addSelectionListener((oldid, newid)-> { 
     text.setText(defList.getItemAt(newid)); 
     hi.revalidate(); 
    }); 
    hi.add(text); 
    hi.add(tf1); 
    hi.show(); 

EDIT 2: Beispiel mit einer verknüpften Karte:

Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS)); 

    Map testMap = new HashMap<String, String>(); 
    testMap.put("Red", "Roses are red"); 
    testMap.put("Green", "Grass is green"); 
    testMap.put("Blue", "Sky is blue"); 
    testMap.put("Orange", "Apricots are orange"); 

    Label text = new Label("Selected text"); 



    DefaultListModel<String> defList = new DefaultListModel<>(testMap.keySet()); 
    AutoCompleteTextField tf1 = new AutoCompleteTextField(defList); 

    defList.addSelectionListener((oldid, newid)-> { 
     text.setText((String) testMap.get(defList.getItemAt(newid))); 
     hi.revalidate(); 
    }); 
    hi.add(text); 
    hi.add(tf1); 
    hi.show(); 
+0

Dank aber es funktioniert nicht –

+0

Wo möchten Sie den ausgewählten Text anzeigen? Auf dem Bildschirm des Geräts? Hier würde mein Code den Text an die Debug-Konsole senden, wie es System.out.println tun würde. Überprüfen Sie die bearbeitete Version des Beispiels. –

+0

Danke, es funktioniert, aber ich möchte jetzt eine Karte in einem AutoComAutoCompleteTextField hinzufügen, weil, wenn ich Element auswählen Ich möchte ID Ich weiß nicht, ob Sie mich verstanden hier ist ein Beispiel final DefaultListModel > Optionen = neu DefaultListModel <>(); AutoCompleteTextField an = neues AutoCompleteTextField (Optionen); –