JavaFX에서 카운트 다운 타이머를 동기화하는 가장 좋은 방법

무네

내 프로그램에는 9 개의 카운트 다운 타이머가 필요합니다. 타이머는 사용자가 시작합니다. 내 구현에서는 시작된 각 타이머에 대한 타이머 클래스를 만듭니다. timerclass는 타임 라인을 사용합니다. 타이머의 시작에 따라 초는 비동기입니다.

진행 방법을 잘 모르겠습니다.

첫 번째 생각은 모든 카운트 다운에 하나의 타임 라인 만 사용하는 것이 었습니다. 모든 stringProperties를 목록에 넣으면 타임 라인이 속성을 변경합니다. 이것이 좋은 방법인지 잘 모르겠습니까?

일부 Google에서는 이러한 문제에 사용할 수있는 animationtimer가 있음을 알았습니다. 그러나 나는 예를 이해할 수 없었다. 핸들 메서드를 덮어 써야합니다. 이것으로 타이머를 어떻게 업데이트해야합니까?

c0der

아이디어는 옳습니다. PauseTransition또는 TimeLine (1) 과 같은 하나의 애니메이션 도구를 사용 하여 다음 MRE에 설명 된대로 모든 카운터를 업데이트합니다 .

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javafx.animation.PauseTransition;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class SyncedCounters extends Application {

    private static final int MAX_COUNT = 100;
    private Map<Label, Integer> counters;
    private VBox countersPane;

    @Override public void start(Stage stage) throws IOException {

        counters = new HashMap<>();
        countersPane = new VBox();
        Button addCounter = new Button("Add Counter");
        addCounter.setOnAction(e->addCounter());
        BorderPane root = new BorderPane(countersPane, null, null, null, addCounter);
        stage.setScene(new Scene(new ScrollPane(root),250,200));
        stage.show();
        update();
    }

    private void update() {

        PauseTransition pause = new PauseTransition(Duration.seconds(1));
        pause.setOnFinished(event ->{
            updateCounters();
            pause.play();
        });
        pause.play();
    }

    private void addCounter() {

        Label label = new Label(String.valueOf(MAX_COUNT));
        label.setAlignment(Pos.CENTER);
        label.setPrefSize(150, 25);
        counters.put(label, MAX_COUNT);
        countersPane.getChildren().add(label);
    }


    private void updateCounters() {
        for(Label l : counters.keySet()){
            int counterValue = counters.get(l);
            if(counterValue > 0 ){
                counterValue--;
                l.setText(String.valueOf(counterValue));
                counters.put(l, counterValue);
            }
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

여기에 이미지 설명 입력


(1) 다음 TimeLine 으로 PauseTransition 변경 하는 대신 사용하려면 update() :

void update() {

    Timeline timeline = new Timeline();
    timeline.setCycleCount(Animation.INDEFINITE);

    KeyFrame keyFrame = new KeyFrame(
            Duration.seconds(1),
            event -> {updateCounters();}
    );

    timeline.stop();
    timeline.getKeyFrames().clear();
    timeline.getKeyFrames().add(keyFrame);
    timeline.play();
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android의 UI에 영향을주지 않고 RecyclerView 내에서 카운트 다운 타이머를 설정하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

카운트 다운 타이머를 만드는 가장 좋은 방법은 무엇입니까?

분류에서Dev

안드로이드 백그라운드 카운트 다운 타이머를위한 가장 좋은 방법

분류에서Dev

확장 가능한 목록보기 및 카운트 다운 타이머에서 그룹 어린이보기를 얻는 방법은 무엇입니까?

분류에서Dev

카운트 다운 타이머를 추가하는 방법

분류에서Dev

백그라운드 지원이있는 UWP 앱에 카운트 다운 타이머를 추가하는 방법은 무엇입니까?

분류에서Dev

(자바 스크립트) 선택 옵션에 카운트 다운 타이머를 추가하는 방법

분류에서Dev

Java Applet에서 카운트 다운 타이머를 만드는 방법은 무엇입니까?

분류에서Dev

Java에서 카운트 다운 타이머를 만드는 방법은 무엇입니까?

분류에서Dev

React에서 카운트 다운 타이머를 표시하는 방법

분류에서Dev

ViewController를 닫은 후 카운트 다운 타이머를 계속하는 방법

분류에서Dev

카운트 다운 타이머에 형식 시간 / 분 / 초를 추가하는 방법

분류에서Dev

두 테이블을 조인하는 쿼리에서 고유 카운트를 얻는 가장 좋은 방법

분류에서Dev

두 테이블을 조인하는 쿼리에서 고유 카운트를 얻는 가장 좋은 방법 (다중 조인 가능성)

분류에서Dev

iOS에서 카운트 업 타이머를 만드는 방법

분류에서Dev

asp.net mvc에서 타이머 카운트 다운 작업을 추가하는 방법

분류에서Dev

iOS (Swift)에서 드롭 다운 UI를 구현하는 가장 좋은 방법

분류에서Dev

반응 카운트 다운 타이머를 만드는 방법

분류에서Dev

고급 카운트 다운 타이머를 만드는 방법

분류에서Dev

카운트 다운 타이머를 만드는 방법

분류에서Dev

루프 내에서 직렬화 된 카운터 변수를 병렬화하는 가장 좋은 방법

분류에서Dev

신속한 라이브 카운트 다운 타이머에 시간을 추가하는 방법

분류에서Dev

C에서 밀리 초 카운트 다운을 수행하는 가장 쉬운 방법은 무엇입니까?

분류에서Dev

웹 사이트에서 이미지를 대량 다운로드하는 가장 좋은 방법

분류에서Dev

카운트 다운 타이머가 끝나면 오디오를 자동 재생하는 방법은 무엇입니까?

분류에서Dev

android 어댑터 클래스에서 카운트 다운 타이머와 함께 캘린더를 사용하는 방법은 무엇입니까?

분류에서Dev

사용자가 웹 페이지에서 별도의 경로로 이동할 때 JavaScript에 카운트 업 타이머를 저장하는 방법

분류에서Dev

javascript를 사용하여 00:00에 도달하면 내 카운트 다운 타이머를 올리는 방법

분류에서Dev

게임 종료시 카운트 다운 타이머를 계속하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Android의 UI에 영향을주지 않고 RecyclerView 내에서 카운트 다운 타이머를 설정하는 가장 좋은 방법은 무엇입니까?

  2. 2

    카운트 다운 타이머를 만드는 가장 좋은 방법은 무엇입니까?

  3. 3

    안드로이드 백그라운드 카운트 다운 타이머를위한 가장 좋은 방법

  4. 4

    확장 가능한 목록보기 및 카운트 다운 타이머에서 그룹 어린이보기를 얻는 방법은 무엇입니까?

  5. 5

    카운트 다운 타이머를 추가하는 방법

  6. 6

    백그라운드 지원이있는 UWP 앱에 카운트 다운 타이머를 추가하는 방법은 무엇입니까?

  7. 7

    (자바 스크립트) 선택 옵션에 카운트 다운 타이머를 추가하는 방법

  8. 8

    Java Applet에서 카운트 다운 타이머를 만드는 방법은 무엇입니까?

  9. 9

    Java에서 카운트 다운 타이머를 만드는 방법은 무엇입니까?

  10. 10

    React에서 카운트 다운 타이머를 표시하는 방법

  11. 11

    ViewController를 닫은 후 카운트 다운 타이머를 계속하는 방법

  12. 12

    카운트 다운 타이머에 형식 시간 / 분 / 초를 추가하는 방법

  13. 13

    두 테이블을 조인하는 쿼리에서 고유 카운트를 얻는 가장 좋은 방법

  14. 14

    두 테이블을 조인하는 쿼리에서 고유 카운트를 얻는 가장 좋은 방법 (다중 조인 가능성)

  15. 15

    iOS에서 카운트 업 타이머를 만드는 방법

  16. 16

    asp.net mvc에서 타이머 카운트 다운 작업을 추가하는 방법

  17. 17

    iOS (Swift)에서 드롭 다운 UI를 구현하는 가장 좋은 방법

  18. 18

    반응 카운트 다운 타이머를 만드는 방법

  19. 19

    고급 카운트 다운 타이머를 만드는 방법

  20. 20

    카운트 다운 타이머를 만드는 방법

  21. 21

    루프 내에서 직렬화 된 카운터 변수를 병렬화하는 가장 좋은 방법

  22. 22

    신속한 라이브 카운트 다운 타이머에 시간을 추가하는 방법

  23. 23

    C에서 밀리 초 카운트 다운을 수행하는 가장 쉬운 방법은 무엇입니까?

  24. 24

    웹 사이트에서 이미지를 대량 다운로드하는 가장 좋은 방법

  25. 25

    카운트 다운 타이머가 끝나면 오디오를 자동 재생하는 방법은 무엇입니까?

  26. 26

    android 어댑터 클래스에서 카운트 다운 타이머와 함께 캘린더를 사용하는 방법은 무엇입니까?

  27. 27

    사용자가 웹 페이지에서 별도의 경로로 이동할 때 JavaScript에 카운트 업 타이머를 저장하는 방법

  28. 28

    javascript를 사용하여 00:00에 도달하면 내 카운트 다운 타이머를 올리는 방법

  29. 29

    게임 종료시 카운트 다운 타이머를 계속하는 방법은 무엇입니까?

뜨겁다태그

보관