javafxでtimelineを使用してタイマーを作っています。1回目の動作が終了し、もう1度開始ボタンを押すとtimelineが重複し、2倍の速さでカウントされてしまいます。この現象を回避する方法が思い浮かばないのですが、何か良い方法は無いでしょうか。
TN8001が👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
JavaFXはほとんどやったことがないので、間違えているかもしれません。
1回目の動作が終了し、
ということはsetCycleCount
で数値が入っているってことですね。
もう一度開始するには単にplay()
でいいようです。
Timeline
を毎回newするようになっていませんか?
Java
1// ラーメンタイマーだと長すぎるので10秒タイマー(雑いです 2import javafx.animation.KeyFrame; 3import javafx.animation.Timeline; 4import javafx.application.Application; 5import javafx.application.Platform; 6import javafx.geometry.Insets; 7import javafx.geometry.Pos; 8import javafx.scene.Scene; 9import javafx.scene.control.*; 10import javafx.scene.layout.VBox; 11import javafx.stage.Stage; 12import javafx.util.Duration; 13 14public class Main extends Application { 15 16 int count; 17 Label label = new Label("0"); 18 Button strat = new Button("Strat"); 19 Button pause = new Button("Pause"); 20 Button reset = new Button("Reset"); 21 Timeline timer; 22 23 public void start(Stage stage) { 24 25 timer = new Timeline(new KeyFrame(Duration.millis(1000), e -> label.setText("" + ++count))); 26 timer.setCycleCount(10); 27 timer.setOnFinished(e -> Platform.runLater(() -> { 28 Alert dialog = new Alert(Alert.AlertType.INFORMATION, "10秒経ったよ!", ButtonType.YES); 29 dialog.showAndWait(); 30 count = 0; 31 label.setText("" + count); 32 })); 33 strat.setOnAction(e -> timer.play()); 34 pause.setOnAction(e -> timer.pause()); 35 reset.setOnAction(e -> { 36 timer.stop(); 37 count = 0; 38 label.setText("" + count); 39 }); 40 41 VBox vBox = new VBox(); 42 vBox.setAlignment(Pos.CENTER); 43 vBox.setPadding(new Insets(10, 10, 10, 10)); 44 vBox.setSpacing(5.0); 45 vBox.getChildren().addAll(label, strat, pause, reset); 46 47 stage.setScene(new Scene(vBox)); 48 stage.show(); 49 } 50 51 public static void main(String[] args) { 52 launch(args); 53 } 54}
投稿2019/12/07 07:54
編集2024/03/04 10:24総合スコア9855
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/09 00:34