JavaのJLabelで動くテキスト(スクロール表示)を実装する方法
JLabelとは
JLabelはJComponentクラスのサブクラスであり、GUI上にテキストによる説明や情報を表示するための軽量コンポーネントです。JLabelは、1行の読み取り専用テキスト、画像、あるいはその両方を表示することができます。また、PropertyChangeListenerインターフェースを明示的に登録して、プロパティの変更を監視することも可能です。
Timerクラスを使った移動テキストの仕組み
JLabel内で動くテキスト(スクロール表示)を実装したい場合は、javax.swing.Timerクラスを利用します。Timerクラスのコンストラクタには、更新間隔を表す速度(ミリ秒単位)と、イベントを受け取るリスナーとしてthis(自身のインスタンス)を引数として渡します。これにより、指定した間隔ごとにactionPerformedメソッドが呼び出され、テキストを少しずつずらす処理を繰り返すことで、文字が流れているように見せることができます。
コード例
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class MovingTextLabel extends JFrame implements ActionListener {
private JLabel label;
public MovingTextLabel() {
setTitle("MovingTextLabel");
label = new JLabel(" Welcome to Tutorials Point ");
label.setFont(new Font("Arial", 0, 25));
add(label, BorderLayout.CENTER);
Timer t = new Timer(400, this); // タイマーを設定(400ミリ秒間隔)
t.start();
setSize(400, 300);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
String oldText = label.getText();
String newText = oldText.substring(1) + oldText.substring(0, 1);
label.setText(newText);
}
public static void main(String[] args) {
new MovingTextLabel();
}
}コードのポイント
- new Timer(400, this):400ミリ秒ごとにアクションイベントを発生させます。
- substring()による文字列の回転:先頭の1文字を取り除き、末尾に付け加えることで、テキストが左方向へ流れるように見えます。
- ActionListenerの実装:JFrame自体がActionListenerを実装しているため、thisを直接Timerに渡せます。
実行結果
プログラムを実行すると、ウィンドウ中央に表示された「Welcome to Tutorials Point」というテキストが、400ミリ秒ごとに1文字ずつ左へシフトしながら、まるで電光掲示板のように流れ続けます。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ