Odliczanie w JavieFX - timer

0

Cześć. Chciałem stworzyć prosty timer w JavieFX.
Nie wiem czy mój sposób jest dobry.
Tworze sobie formatkę z przyciskiem START/STOP, oraz 3 Labelami: 1) Minuty 2) ":" 3) Sekundy, jakby połączyć te 3 labele wychodzi np: 3:34.
W wyniku czego mogę łatwo pobrać liczbe minut i sekund i przekonwertować to na sekundy. Wyświetlanie za pomocą np. labelOfMinutes.setText(amountOfMinutes), sekundy tak samo z tą rożnicą że jest to modulo, gdzie int amountOfMinutes = time/60;, amountOfSeconds = time%60.

Nie potrafię wymyślić innego dobrego pomysłu jak rozwiązać to odliczanie w dół.

Może ma ktoś inny pomysł?

0

O czymś takim mówiłem, ale program się wywala w pętli. Nie dotarłme do tego jeszcze dlaczego.

 @FXML
    void startTimer() throws InterruptedException {

        int amountOfMinutes = Integer.parseInt(displayMinutes.getText());
        int amountOfSeconds = Integer.parseInt(displaySeconds.getText());

        int time = amountOfMinutes * 60 + amountOfSeconds;
        System.out.println(time);
        for (int i = 0; i < time; time--) {
            displayMinutes.setText(String.valueOf(amountOfMinutes / 60));
            displaySeconds.setText(String.valueOf(amountOfSeconds % 60));
            Thread.sleep(1000);
            displaySeconds.setText("");
            displayMinutes.setText("");
        }
    }
0

Nie jestem pewien, ale chyba robisz wszystko w jednym wątku, czyli twój UI thread "wiesza się", spróbuj zrobić to odliczanie w innym wątku, albo poczytaj o Platform.runLater

0

Polecam użyć AnimationTimer. Przykłądowe użycie:

private AnimationTimer timer = new AnimationTimer() {
	private long time;
        private long startTime;
        private double time = 0;

        @Override
        public void start() {
            super.start();
            startTime = System.currentTimeMillis();
        }

        @Override
        public void stop() {
            super.stop();
        }

        @Override
        public void handle(long now) {
            DateFormat df = new SimpleDateFormat("HH:mm:ss.SSS");
            long newTime = System.currentTimeMillis();
            time = newTime - startTime;
            timerLabel.setText(df.format(time));
        }
    };

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