🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

461閲覧

javafx timelineが重複する際の回避方法を知りたいです。

saji

総合スコア9

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2019/12/05 06:34

javafxでtimelineを使用してタイマーを作っています。1回目の動作が終了し、もう1度開始ボタンを押すとtimelineが重複し、2倍の速さでカウントされてしまいます。この現象を回避する方法が思い浮かばないのですが、何か良い方法は無いでしょうか。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saji

2019/12/09 00:34

すごく丁寧な回答ありがとうございます。無事解決できました!感謝です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問