Dzień dobry,
W związku z tym że to moje początki w Javie, a mam pewien program do napisania, taki do nabrania rozpędu, to chciałbym zadać dwa pytania. Mam JTextField, użytkownik wpisuje tekst, w momencie gdy wpisze określone słowo, powinien pojawić się komunikat, a następnie po kilku sekundach to słowo powinno zmienić kolor. Teraz tak, problem jest z zaznaczeniem właśnie tego wybranego słowa, chciałbym o jakąś radę czego użyć, ponieważ nie mam na to pomysłu. A co do czekania, to jakiej funkcji najlepiej użyć?
Pozdrawiam
setSelectionStart
, setSelectionEnd
i Timer
.
W JTextField
nie możesz dowolnie kolorować części tekstu. Odróżnia się wizualnie tylko fragment, który jest selected
. Jeśli chcesz dowolnie kolorować, to użyj innego komponentu, np. JTextPane
.
Ok, wybieranie słowa już mam, tylko teraz rodzi się kolejne pytanie, chciałbym żeby wybierane były też słowa odmieniane, jak również pisane z wielkich liter. Mam np. czerwień, a w bazie słów czerw, da się tak zrobić żeby czerwień została zaznaczona?
Da się, metody contains
i toLowerCase
.
Ok, tylko teraz jak zrobić że jeśli w swoim słowniku mam czerw, to żeby zaznaczyło całe słowo czerwień? Obecnie robie to tak:
int a=0;
for (int i = 0; i < lista.size(); i++) {
if(tekst.toLowerCase().contains(lista.get(i)))
{
a=lista.get(i).length();
}
}
return a;
Słownik mam w liście. Ale teraz brane jest tylko pod uwagę słowo czerw a nie czerwień
Wstawiaj kod w znaczniki <code class="java"></code>
.
Wpierw musisz tekst
podzielić na słowa , potem sprawdzać
if(word.toLowerCase().contains(lista.get(i)))
i zaznaczać cały word
.
Co do wstawiania kodu to się poprawię ;) A jakaś podpowiedź jak podzielić tekst na słowa? Zaznaczam że program sprawdza słowo po każdym naciśnięciu spacji. Więc nie jest tak że po wpisaniu całego tekstu dopiero jest to sprawdzane.
String word = "To jest tekst";
String[] splitter = word.split(" ");
String result = splitter[0] + " " + splitter[1] + " " + splitter[2];
To podzieli Ci tekst na słowa, przerwami w tym przypadku muszą być spacje.
Ok, wszystko ładnie działa, zaznacza się to co trzeba, teraz ostatnia sprawa, pod textField mam JLabel która na początku jest pusta, w momencie gdy zostanie wpisane dane słowo chcę aby pokazał się w niej jakiś tekst i po 3 sekundach zniknął, jak to ugryźć? Timerem?
Timer jest dobrym rozwiązaniem.
A jakas mała podpowiedź jak tego użyć? Czytalem trochę ale nie potrafię tego zaimplementowac w moim programie
Są dwie odpowiednie klasy Timer: java.util.Timer oraz javax.swing.Timer. Kod jest dla java.util.Timer
Timer = new Timer();
timer.schedule(new ChangeLabel(),3000);
class ChangeLabel extends TimerTask{
public void run(){
label.setText("");
}
}
Ok, dzięki wielkie, działa