Nie wyświetlanie się tekstu w JTextField-ach

Odpowiedz Nowy wątek
2014-12-15 21:58
0

Witam,
mam taki problem, tworzę sobie prostą aplikację do czasowników nieregularnych i napotkałem na dziwny problem. Problem jest w funkcji nastepny(). Chciałem wyświetlić w JTextField napisy np. na 1s a następnie automatycznie przejść dalej, czyli wszystko wyczyścić i od nowa.... Tylko że po napisaniu jak niżej i zrobieniu sleep(1000), program najpierw śpi i nie wyświetla :/

    public boolean nastepny() {
        if(jButton2.isEnabled()){
            /*Runnable w2 = new Watek();
            Thread watek2 = new Thread(w2);
            watek2.start();*/
            sprawdz();
            czekaj();
        }
        index++;
        if (indeksy.isEmpty()) {
            jLabel1.setText("Koniec");
            jButton1.setText("Losuj");
            jSlider1.setEnabled(true);
            jTextField4.setEnabled(true);
            this.aktywuj(false);
            dzialaj.serializuj();
            this.reset();
            return true;
        }
        if (index == indeksy.size()) {
            index = 0;
        }
        jLabel1.setText(dzialaj.getConcret(indeksy.get(index)).getEng1());
        jLabel2.setText(dzialaj.getConcret(indeksy.get(index)).getEng2());
        jLabel3.setText(dzialaj.getConcret(indeksy.get(index)).getEng3());
        jLabel4.setText(dzialaj.getConcret(indeksy.get(index)).getPol());
        this.reset();
        jButton2.setEnabled(true);
        return false;
    }
    public void czekaj(){
        try{
            Thread.sleep(5000);
        }catch(InterruptedException ex){
            System.out.println("Nie mozna zatrzymać programu");
        }
    }
    /*public class Watek implements Runnable{
        public void run(){
            sprawdz();
        }
    }*/

cały kod: http://ideone.com/b4vlxM

Tak wygląda przed kliknięciem jakiegokolwiek przycisku
04c8aecb73.png
A tak po wciśnięciu Sprawdź i chciałbym żeby tak wyglądał przez tą sekundę:
6fd232ddd2.png
po czym powrócił do wersji startowej

Aplikacja polega na wpisywaniu form czasowników. Jeśli wpiszemy wszystkie i klikniemy przycisk "Sprawdź" uruchomi on metodę sprawdz(). Metoda sprawdz(), jest odpowiedzialna za sprawdzenie poprawności wyniku, a jeśli jest błędny to wyświetlenie poprawnego. Przycisk "Następny" powoduje wyświetlenie kolejnego czasownika. Chciałbym zrobić to tak, żeby, jeśli ktoś nie kliknie przycisku "Sprawdź", tylko od razu po wpisaniu czasowników kliknie "Następny", przycisk ten zadziałał jak sprawdź, czyli sprawdził poprawność i np po 1s wyświetlił następny czasownik.
Niestety po tym co napisałem program czeka tę sekundę po czym wyświetla następne słowo.
Z moich obserwacji wynika, że program najpierw czeka (sleep) a następnie wykonuje sprawdzanie :/ a chciałbym to zrobić w odwrotny sposób.

edytowany 1x, ostatnio: misiek2709, 2014-12-15 23:23

Pozostało 580 znaków

2014-12-16 15:07
0

To co zamieściłeś na ideone to nie jest cały kod. Brakuje klasy Działaj.
Usypianie jest kiepskim pomysłem. Wyświetl napisy i stwórz Timera, który je po sekundzie zmaże.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2014-12-16 15:07

Pozostało 580 znaków

2015-01-04 02:58
0

Najpierw radziłbym poczytać jak w ogóle działają wątki w Swingu.
Swing ma swój mechanizm do obsługi wątków: dopiero tam możesz tworzyć własne wątki czy też pule wątków.
W zaprezentowanym powyżej przykładzie wstrzymujesz główny wątek aplikacji czyli po prostu zamrażasz jej działanie.

edytowany 1x, ostatnio: dzanesko, 2015-01-04 02:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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