3 Stimmen

Textfeld mit automatischer Vervollständigung / Dropdown-Menü schwingen

Wir benötigen ein Autocompletion-Komponente für Swing, das Problem bei dem in jdesktop/SwingX ist, dass wir ein Kombinationsfeld verwenden müssen und nach jedem Tastendruck einfach zur nächsten Übereinstimmung scrollt, aber das Kombinationsfeld trotzdem die 25.000 Elemente enthält. Es zeigt nicht die 4 oder 5, die am nächsten beieinander liegen, weil sie an verschiedenen Stellen der Liste sein können. Wir möchten auch nicht eine Liste mit den 25000 anzeigen...

Gibt es etwas Ähnliches wie das JSF-Autocompletion oder das auf der Google-Startseite? Was wir brauchen, ist eine Komponente, die unsere Oberfläche etwas Ähnliches fragt wie

public List getOptions(String typedSoFar) { // Hier geben wir die 5 übereinstimmenden gemäß unseren Kriterien zurück und bieten einfach diese 5 dem Benutzer an }

5voto

Erick Robertson Punkte 30890

Ein wirklich einfacher Weg, dies zu tun, besteht darin, die GlazedList-Implementierung der Autovervollständigung zu verwenden. Es ist sehr einfach, es zu starten und zu verwenden. Sie finden es hier:

http://publicobject.com/glazedlists/

Sie können die Autovervollständigung auf einem JComboBox mit nur einer Zeile Glazed-Code installieren, wie folgt:

JComboBox comboBox = new JComboBox();
Object\[\] elements = new Object\[\] {"Katze", "Hund", "Löwe", "Maus"};
AutoCompleteSupport.install(comboBox, GlazedLists.eventListOf(elements));

1voto

Marwen Trabelsi Punkte 4041

GlazedList Nicht sehr gut, auch SwingX unterstützt Auto-Vervollständigung und ist einfacher als "GlazedList". Sie müssen nur schreiben:

AutoCompleteDecorator.decorate(yourComboBox);

0voto

Ragul JB Punkte 1

SwingX ist die beste Antwort.

AutoCompleteDecorator.decorate(textComplete, strings, true);

wo textComplete das Textfeld ist, strings die jList mit dem Vorschlagwörterbuch und der letzte Wert ist, ob der Inhalt des Textfelds auf das Wörterbuch beschränkt sein soll oder nicht.

-2voto

matiasf Punkte 1050

Ich habe SwingX nicht verwendet und weiß nichts über deren Implementierung. Die beste Idee wäre wahrscheinlich, die SwingX-Autocomplete-Klasse zu erweitern. Anstatt die Autocomplete-Klasse direkt zu verwenden, erstellen Sie eine eigene Klasse, die die Autocomplete-Klasse erweitert, und überschreiben Sie die getOptions()-Methode:

class OurOwnAutocomplete, die swingx.*.*.autocomplete erweitert {

    private List getOptions(String bisJetztEingegeben) { // 

    // Logik 

   }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X