Java

JavaFX デジタル時計のサンプルプログラムを作成してみた

読了時間: 約551
JavaFX デジタル時計のサンプルプログラム

今日は、プログラミングをしたい欲がいつもよりあるので…。
さらにプログラムを作成してみることにしました。

今度は、JavaFXで簡単なサンプルプログラムを作ってみました。
その内容というのは「デジタル時計」です。
現在時刻を画面に表示するだけというシンプルなものです。

JavaFXを触るのは久しぶりでしたので、まずは簡単なプログラムで腕慣らし。
シンプルなデジタル時計くらいなら、それほど手間がかからないだろうということでサクッと作ってみましたよ。
比較的小さなプログラムですので、JavaFXの入門にもちょうど良い題材ではないでしょうか。

今回の記事では、私が作成したシンプルなデジタル時計のサンプルプログラムの解説をしていきます。

デジタル時計の仕様

今回作成したデジタル時計の仕様は以下のとおりです。

・画面に現在の日付と時刻を表示する。
・定期的に情報を更新する。

日付と時刻をテキストとして画面に表示します。
すなわち、以下のようなイメージです。
これを普通の時計のように、日付と時刻を随時更新していきます。

2018/08/02 17:32:05

また、おまけの要素として…。
黒背景で白文字のデジタル時計にしてみます。
ちなみに、これは何となくです。

開発環境

私のJavaFXにおける開発環境は以下のとおりです。
ちょっと前から、Oracle JavaではなくOpenJDKを使うようにしました。
それに伴って、JavaFXの環境もOpenJFXにしています。

・MacOS High Sierra 10.13.6
・IntelliJ IDEA 2018.2
・OpenJDK 11 ea 23
・OpenJFX 11 ea 19

現在の日付と時刻の取得方法

JavaFXで、現在の日付と時刻を取得するにはLocalDateTimeクラスを使います。
LocalDateTime.now()とすることで、現在時刻の情報が取得できます。

LocalDateTime t = LocalDateTime.now();

このLocalDateTimeの情報を元にして、日付と時刻のフォーマットにした文字列を取得します。
LocalDateTimeに対応したフォーマッターは、DateTimeFormatterクラスになります。
DateTimeFormatter.ofPattern()メソッドの引数にフォーマットを入力します。

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

LocalDateTimeのインスタンスに対して、LocalDateTime#format()メソッドを呼び出します。
引数にはさきほどのDateTimeFormatterを指定します。
返り値はフォーマットされた文字列になります。

String time = t.format(f);

あとは、このtimeをラベルなりに設定すれば良いですね。

定期処理の方法

JavaFXで、定期的な処理を実現する方法というのはいくつかあります。
ここでは、お手軽に実装できるAnimationTimerクラスを使ってみることにします。

AnimationTimerクラスにはhandleメソッドがありますので…。
そのhandleメソッドをオーバーライドして、実際の処理内容を記述します。
即時実行したいので、start()メソッドを呼んで実行を開始しています。

new AnimationTimer() {
    @Override
    public void handle(long now) {
        処理内容;
    }
}.start();

デジタル時計プログラムの実装

それでは、ここまでを踏まえて実際にデジタル時計のプログラムを組んでみます。
今回作成するのは、わずか2ファイルのみです。
「Main.java」と「module-info.java」ですね。

まずは、「module-info.java」を見ていきましょう。
ここでは、プログラム中で使用するモジュールを指定します。
「Main.java」を作る場所は、「com.suzushinlab.digitalclock」パッケージの下とします。

【module-info.java】

module DigitalClock {
    requires javafx.controls;
    exports com.suzushinlab.digitalclock;
}

続いて、メイン処理を行う「Main.java」です。
通常、GUIはFXMLとコントローラーで制御するかと思いますが…。
このサンプルプログラムでは、直接プログラムでGUIの生成と処理内容を記述しています。

【Main.java】

package com.suzushinlab.digitalclock;

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main extends Application {
    @Override
    public void start(Stage stage) {
        stage.setTitle("Digital Clock");

        Group root = new Group();
        Label label = new Label();
        root.getChildren().add(label);

        // Labelの設定
        label.setPrefWidth(200);
        label.setPrefHeight(40);
        label.setAlignment(Pos.CENTER);
        label.setFont(Font.font("Serif", 20));
        label.setTextFill(Color.web("#ffffff"));
        label.setStyle("-fx-background-color: #333333;");

        // Sceneの設定
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();

        // 定期処理の設定
        new AnimationTimer() {
            DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

            @Override
            public void handle(long now) {
                LocalDateTime t = LocalDateTime.now();
                String time = t.format(f);
                Platform.runLater(() -> label.setText(time));
            }
        }.start();
    }

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

デジタル時計プログラムの実行結果

上記、プログラムの実行結果は以下のとおりです。
きちんと現在の日付と時刻が表示されているのが分かりますね。
時間が経過すると、日付や時刻が更新されます。
実際にプログラムを組んで、動作を確認してみてください。

JavaFX デジタル時計のサンプルプログラム

まとめ

今回の記事では、JavaFXで作成したデジタル時計のサンプルプログラムについての解説を行いました。
比較的小さなプログラムですので、プログラムを実際に読んでもらえれば処理内容が分かると思います。
これぐらいのコード量で、デジタル時計が実装できるのはすごいですよね!

JavaFXも、使いこなせるようになれば高度なものが作れますよね。
私は何かすごいものを作って公開してみたいですので…。
今後もJavaFXの勉強をしていきます!

書いた人: 鈴木俊吾(すずしん)
フリーランスのライター・ブロガー・プログラマ。

大学卒業後、公務員を目指していたが失敗。
その後、仕事をしようとするも全て不採用に。
そのうち、心を病んで統合失調症を発症。
入退院を繰り返す。

「仕事をもらえないなら自分で作ればいい」「自分の好きな仕事だけをやろう!」と思うようになり、フリーランスに転身。
現在は、ブログの更新やアプリ開発を主な仕事にしている。

趣味は音楽鑑賞・読書・カラオケ・オセロ。
特に好きな歌手は水樹奈々で、ファンクラブにも所属している。
最近ハマっている曲は「恋想花火」。

フィードを登録していただくと、ブログの更新を把握しやすくなります。
あなたからの登録をお待ちしています!

Feedly
RSS

Twitter: @suzushin7

コメントを残す

%d人のブロガーが「いいね」をつけました。