TextField i List

0

Cześć, mam pytanie tworzę w netbeans aplikacje desktopową w javie, do formatki dodaje pole tekstowe i pole list(które wypełniam danymi(wyrazami), mam pytanie, czy istnieje możliwość aby po wpisaniu kolejnej litery w polu textfield automatycznie wyświetlało mi wyrazy w list, które zawierają taką literę w polu np wpisze ka to wyświetli wszystkie zaczynające się na ka ?

0

Przykład: podepnij pod textFielda keyListenera, niech w każdym keyReleased sprawdza czy 'textField.getText().length()>0', jeżeli tak, niech przeczesuje bazę Twoich danych (niech chociażby stosuje dla kolejnych wyrazów 'string.startsWith(wpisanyText)') i każdy spełniający ten warunek niech wrzuca do jakiejś tablicy String[] (tworzysz najpierw 'buforową' taką tablicę, kopiujesz do niej w pętli 'for' wszystkie dane z 'wyjściowej tablicy', powiększasz 'wyjściową o 1 element', kopiujesz z powrotem do niej stare elementy z 'buforowej', którą przed chwilą stworzyłeś, a ostatni element, którego indeksem będzie 'buforowaTablica.length', będzie kolejnym wyrazem spełniającym warunek), albo przez arrayLista, może być łatwiej, potem na jego bazie stworzysz tablice String, którą wrzucisz do modelu jListy.
Jeszcze musiałbyś się zastanowić nad jakąś optymalizacją, bez sensu żeby co naciśnięcie klawisza program przeczesywał baze danych i zmieniał listę, jak ktoś szybko pisze, to może być niewydajne. Możesz dla przykładu taki algorytm zastosować:
W momencie naciśnięcia przycisku, jakaś zmienna w double'u przyjmuje aktualnyCzas System.currentTimeMillis(), oraz odpalany jest wątek (jeżeli takowy jeszcze NIE istnieje - znaczy, wątek zostanie odpalony tylko przy naciśnięciu 'pierwszy raz' klawisza przy rozpoczęciu pisania po jakimś odstępie), który zmieniać będzie elementy jList - jednak przed zmienianiem, będzie jakaś prosta pętla typu:

while (System.currentTimeMillis()-aktualnyCzas<500)
    try {Thread.sleep(100);} catch (Exception e) {}

która będzie 'unieruchamiała' wątek na czas pisania (tutaj: jeżeli ktoś będzie pisał naciskając klawisze z interwałem większym od 500ms - lista będzie update'owana co naciśnięcie klawisza).
Pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1