質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Q&A

1回答

1728閲覧

Java ある日時からの時刻を時計のように表示したい

1421

総合スコア4

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

0グッド

0クリップ

投稿2021/11/08 02:30

Javaである指定の日時からの時刻をjframeで表したいです。

例えば、
jframe上で  2015/11/3/15:30:00

と入力し実行すると
2015/11/3/15:30:01

というように時刻が時計のように更新されるようなものを作りたいです。

ネットで調べてみると現在時刻をjframeにリアルタイムに表示し続けるものはあったのですが、日時を指定してその日時からの時刻をリアルタイムに表示し続けるものが見つからず行き詰っています。

どなたかアドバイスよろしくお願いいたします。

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

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

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

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

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

dodox86

2021/11/08 02:37

> ネットで調べてみると現在時刻をjframeにリアルタイムに表示し続けるものはあった ではまず、そのプログラムの内容を充分に理解し、参考にさせてもらえばよいのでは? 1から10まで要望通りのものがWEB上にあるわけではないです。
jimbe

2021/11/08 05:05

本当に作りたいのでしょうか。 それとも単に(誰かに作って)欲しいだけなのでしょうか。 前者なら、見つけた情報を元にどうすれば良いか考えてプログラムを作り、それでどうしてもご希望通り動かなければ、どの情報からどう考えて改造したのか、動作しない原因をどう考察しどんなことを試してどういう結果だったか等を添えてコードをご提示されるよう、ご質問を編集してください。 後者なら、それは丸投げ・依頼ですので、 teratail で質問ではなく、例えばココナラ等で依頼されたほうが良いでしょう。
guest

回答1

0

いろんな方法が考えられますが、LocalDateTimeを使った方法です。

LocalDateTime.now()には、Clockを指定するオーバーロードがあります。
LocalDateTime - now (Java Platform SE 8 )

単体テスト等で使うことが多いと思いますが、今回の目的にも便利に使えます。
今の日時と入力された日時の差をオフセットしたClockを作ります。
Clock - offset (Java Platform SE 8 )
Duration - between (Java Platform SE 8 )

後は普通の時計と同じように作るだけです(面倒なので超雑です^^;

Java

1import java.time.Clock; 2import java.time.Duration; 3import java.time.LocalDateTime; 4import java.time.format.DateTimeFormatter; 5import javax.swing.JButton; 6import javax.swing.JFrame; 7import javax.swing.JLabel; 8import javax.swing.JPanel; 9import javax.swing.JTextField; 10import javax.swing.Timer; 11 12public class Sample extends JFrame { 13 public static void main(String[] args) { 14 new Sample().setVisible(true); 15 } 16 17 private final DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern("yyyy/M/d/H:m:s"); 18 private final DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd/HH:mm:ss"); 19 20 // 使用するクロック(最初はデフォルト=普通の時計) 21 private Clock clock = Clock.systemDefaultZone(); 22 23 Sample() { 24 setDefaultCloseOperation(EXIT_ON_CLOSE); 25 setLocationRelativeTo(null); 26 setSize(300, 200); 27 28 var panel = new JPanel(); 29 add(panel); 30 31 var label = new JLabel(outFormatter.format(LocalDateTime.now())); 32 panel.add(label); 33 34 var textField = new JTextField(20); 35 textField.setText("2015/11/3/15:30:00"); 36 panel.add(textField); 37 38 var button = new JButton("⏲ 指定日時にタイムトラベル ⏲"); 39 button.addActionListener(e -> { 40 // 日時フォーマットを指定してLocalDateTimeに変換(フォーマットがあっていなければ当然エラー) 41 var localDateTime = LocalDateTime.parse(textField.getText(), inFormatter); 42 // 今の日時との差 43 var duration = Duration.between(LocalDateTime.now(), localDateTime); 44 // クロックをずらす 45 clock = Clock.offset(Clock.systemDefaultZone(), duration); 46 }); 47 panel.add(button); 48 49 new Timer(1000, e -> { 50 // クロックを指定して今の日時を取得(クロックがずれていれば、ずれた日時) 51 var localDateTime = LocalDateTime.now(clock); 52 // 日時フォーマットを指定してStringに変換 53 label.setText(localDateTime.format(outFormatter)); 54 }).start(); 55 } 56}

日時フォーマット(0をつけるかどうか)がはっきりしなかったので入出力でわけましたが、お好きにどうぞ。
DateTimeFormatter (Java Platform SE 8 )

アプリ画像

投稿2021/11/08 09:51

編集2023/07/29 07:59
TN8001

総合スコア9401

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問