operacje na klawiszach

0

Robię program, ktory ma za zadanie sprawdzac czas pomiedzy wduszaniem kolejnych klawiszy w konkretnym JTextFieldzie, po naduszeniu ENTERA przechodzimy do kolejnego TextFielda i procedura powinna zaczac sie na nowo i tak w kazdym z 5 kolejnych, poki co sprawdza i zapisuje czas pomiedzy poszczegolnymi klawiszami z peirwszego textfielda oraz po ENTERZE przechodzi do kolejnych, chcialabym jednak to troche zautomatyzowac. Poki co wartosci z pierwszego textfielda zapisuje do zmiennych "c,d,e1,f,g" chcialabym aby w kolejnych iteracjach zapisywało np do "cc, dd... " tak abym potem mogla porówywac te wartosci i zapisywać je do bazy. ma ktos jakis pomysl ?

public void keyPressed(KeyEvent e) {

        obr++;
        if (obr == 1) {
            c = e.getKeyChar();
            myTime = System.currentTimeMillis();
        }
        if (obr == 2) {
            d = e.getKeyChar();
            myTime1 = System.currentTimeMillis();
            long result = (System.currentTimeMillis() - myTime) / 10;   
            System.out.print("Czas między 1, a 2:" + result + "\n");
        }

        if (obr == 3) {
            e1 = e.getKeyChar();
            myTime2 = System.currentTimeMillis();
            long result = (System.currentTimeMillis() - myTime1) / 10;
            System.out.print("Czas między 2, a 3:" + result + "\n");

        }
        if (obr == 4) {
            f = e.getKeyChar();
            myTime3 = System.currentTimeMillis();
            long result = (System.currentTimeMillis() - myTime2) / 10;
            System.out.print("Czas między 3, a 4:" + result + "\n");
        }
        if (obr == 5) {
            g = e.getKeyChar();      
            long result = (System.currentTimeMillis() - myTime3) / 10;
            System.out.print("Czas między 4, a 5:" + result + "\n");
            System.out.print("Wpusywane litery to:" + c + "," + d + "," + e1 + "," + f + "," + g);
        }
        
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            klik++;
            if (klik == 1) {
                th1.transferFocus();
            }
            if (klik == 2) {
                th2.transferFocus();
            }
            if (klik == 3) {
                th3.transferFocus();
            }
            if (klik == 4) {
                th4.transferFocus();
            }
0

A nie możesz tego w tablice wrzucać?
Np. wyniki[klik][obr] ?

Deklarujesz przed funkcją klik = 0 i obr = 0 a kolejnych ifach zamiast "c = e.getKeyChar()" dajesz "wyniki[klik][obr] = e.getKeyChar()" . Później wyciągasz to jakimś foreachem i po sprawie. Na koniec funkcji w ifie przy klik == 4 wyzeruj obr i powinno chyba śmigać :)

Nie wiem czy dobrze problem zrozumiałem po Twoim opisie, w razie co sprostuj czego Ci brakuje.

0

bardzo dziekuje, chyba zrozumialam :wyniki[D a jeszcze takie pytanie, bo teraz do tablicy[klik][obr] zapisywac bedzie mi poszczegolne litery,
chcialabym jednak aby zapisywało jeszcze czas pomiedzy ich wciskaniem do innej tablicy? jak sie za to zabrac?

0

A no tak... Szybko napisałem to wszystko i trochę zbyt uprościłem plus ostatnio głownie w PHP siedzę i JS więc zapomniałem, że w Javie nieco inaczej wyglądają tablice... :P

Może w takim razie zrób to na obiektach?

Np. Stwórz obiekt Klik i daj mu jako pola dwie tablice, jedna na klawisze a druga na czas.
Później obiekty Klik możesz trzymać w tablicy obiektów Klik jeżeli były by Ci potrzebne.

Sam jeszcze ucze się sporo o programowaniu, ale w myśl zasady DRY można Twój kod nieco przerobić dodając moje sugestie np.:


//Przed funkcją tworzysz obiekt klik z tablicą longów pod CZAS i tablicą charów pod KLAWISZE.
//Napisałem tylko sugestie jak to ma działać,
//w praktyce możesz stworzyć odpowiednie setery, getery
//jak również większość kodu z IFow przenieść jako odpowiednie metody obiektu
//plus inkrementacja na początku kodu jest chyba dość dziwną praktyką 

public void keyPressed(KeyEvent e) {

obr++;

if(obr <6){

    klik.klaiwsz[obr] = e.getKeyChar(); 

    if(obr==1){

        klik.czas[obr] = czas systemu;} 

    else {

        klik.czas[obr] -= klik.czas[obr-1]; 
        System.out.print.("Czas miedzy" + (obr-1) + ", a " + obr + "  to: " + (klik.czas[obr]/10) + "\n");
        System.out.print("Wpisywane litery to: " + String.join(",", klik.klawisze));

    }
} 
//Nie wiem jak reszta kodu u Ciebie wygląda ale pewnie też można to poprawić, żeby nie powtarzać cały czas tego samego IFa :)
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            klik++;
            if (klik == 1) {
                th1.transferFocus();
            }
            if (klik == 2) {
                th2.transferFocus();
            }
            if (klik == 3) {
                th3.transferFocus();
            }
            if (klik == 4) {
                th4.transferFocus();
            }

}

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