Swing の JFrame による単純なウィンドウ表示

ここでは Swing を利用して、最も単純なフレーム (Frame) を表示します。

Swing によるフレームの表示

フレームというのは、Java ではトップレベルウィンドウ (top-level window) のことを指します。 AWT ではフレームは Frame というクラスであり、Swing では JFrame といいます。そして、これは Frame の派生クラスです。

package com.keicode.java.test;

import javax.swing.*;
import java.awt.*;

public class SwingTestApp1 {
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new JFrame();
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }
    });
  }
}

コードをみてみましょう。

まず Swing のクラス群は javax.swing.* に含まれています。javax というのは、 Swing が AWT の拡張 (eXtension) という位置付けだからです。

JFrame のインスタンスを作成した後は、サイズを指定し (setSize メソッド)、 フレームを閉じた時の動作を指定し (setDefaultCloseOperation メソッド)、 そして最後にフレームを表示しています (setVisible メソッド)。

最低でもこれだけはやらないと、ウィンドウが見えてきません。

イベント・ディスパッチ・スレッドで処理を行う

注意する点としては、Swing の UI コンポーネントは全てイベント・ディスパッチ・スレッド (event dispatch thread) で行うということです。

これを実現するために、上記のように EventQueue の invokeLater メソッドを利用しています。 invokeLater() メソッドに実行するタスクを渡します。

    EventQueue.invokeLater(new Runnable() {
      public void run() {
        // ...
      }
    });

また Runnable インターフェイスは run() メソッドをひとつ持つだけのインターフェイスなので、次のようにラムダ式で書き換えることもできます。

  public static void main(String[] args) {
    EventQueue.invokeLater(() -> {
      // ...
    });
  }

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門