フレームを作成する

フレームを作成するには JFrame クラスを使用します。ここでは JFrame クラスの定義やコンストラクタについて確認し、実際に JFrame クラスのオブジェクトを作成してフレームを表示する方法について解説します。

(Last modified: )

JFrameクラスの定義

JFrame クラスは次のように定義されています。

java.lang.Object
  java.awt.Component
    java.awt.Container
      java.awt.Window
        java.awt.Frame
          javax.swing.JFrame

public class JFrame extends Frame implements WindowConstants, Accessible, RootPaneContainer

JFrame クラスは Frame クラスのサブクラスです。 Frame クラスは Swing が広く使われる前に利用されていた AWT で使われていたフレームであり、 JFrame クラスは Frame クラスの基本部分を継承しさらに機能を追加したクラスとなっています。

JFrameクラスのコンストラクタ

JFrame クラスをを利用するにはコンストラクタを使って JFrame クラスのオブジェクトを作成します。次のようなコンストラクタが用意されています。

public JFrame() throws HeadlessException

初期状態が不可視である、新しいフレームを構築します。
このコンストラクタはコンポーネントのローカル・プロパティをJComponent.getDefaultLocaleによって返された値に設定します。
例外:
HeadlessException - GraphicsEnvironment.isHeadless()がtrueを返した場合。

public JFrame(GraphicsConfiguration gc)

画面デバイスの指定されたGraphicsConfigurationと空のタイトルで、Frameを作成します。
このコンストラクタはコンポーネントのローカル・プロパティをJComponent.getDefaultLocaleによって返された値に設定します。

パラメータ: gc - 新しいFrameの構築に使用するGraphicsConfiguration。gcがnullの場合、システムのデフォルトのGraphicsConfigurationが使用される

例外:
IllegalArgumentException - gcが画面デバイスのものでない場合。この例外はGraphicsEnvironment.isHeadless()がtrueを返す場合に必ずスローされる。

public JFrame(String title) throws HeadlessException

指定されたタイトルを使用して、初期状態で可視ではない新しいFrameを作成します。
このコンストラクタはコンポーネントのローカル・プロパティをJComponent.getDefaultLocaleによって返された値に設定します。

パラメータ:
title - フレームのタイトル

例外:
HeadlessException - GraphicsEnvironment.isHeadless()がtrueを返した場合。

public JFrame(String title, GraphicsConfiguration gc)

指定されたタイトルと、画面デバイスの指定されたGraphicsConfigurationで、JFrameを作成します。
このコンストラクタはコンポーネントのローカル・プロパティをJComponent.getDefaultLocaleによって返された値に設定します。

パラメータ:
title - フレームのボーダーに表示されるタイトル。 null値は、空の文字列""として処理されます。

gc - 新しいJFrameの構築に使用するGraphicsConfiguration。gcがnullの場合、システムのデフォルトのGraphicsConfigurationが使用される

例外:
IllegalArgumentException - gcが画面デバイスのものでない場合。
この例外はGraphicsEnvironment.isHeadless()がtrueを返す場合に必ずスローされる。

主に使用するのは 1 番目及び 3 番目のコンストラクタです。 1 番目のコンストラクタは非表示のフレームを作成します。

実際の使い方は次のようになります。下記ではタイトルに MyTitle と表示されるフレームが作成されます。なおフレームは作成しただけでは非表示となっているので、別途表示する処理が必要となります。

import javax.swing.JFrame;

class Sample{
  public static void main(String args[]){
    JFrame frame = new JFrame("MyTitle");
  }
}

どちらのコンストラクタを使ってフレームを作成した場合でも、デフォルトでは非表示となっていますので明示的に表示にする必要があります。実際の使い方は次のようになります。

フレームを表示する

JFrame クラスからオブジェクトを作成した場合、デフォルトではフレームは非表示となっています。フレームを表示するには JFrame クラスの親クラスである Window クラスで定義されている setVisible メソッドを使います。

public void setVisible(boolean b)

パラメータbの値に応じて、このWindowを表示または非表示にします。
このメソッドでウィンドウを表示する場合、次の条件下ではウィンドウにフォーカスも設定されます。

・WindowがisFocusableWindow()メソッドで概説されている要件を満たしている。
・WindowのautoRequestFocusプロパティの値がtrueである。
・このWindowがフォーカスを取得することが、ネイティブのウィンドウ処理システムで許可されている。

2番目の条件(autoRequestFocusプロパティの値)には例外があります。ウィンドウがモーダル・ダイアログの場合、このプロパティは考慮されず、現在フォーカスのあるウィンドウがブロックされます。
開発者は、このウィンドウがWINDOW_GAINED_FOCUSまたはWINDOW_ACTIVATEDイベントを受け取るまで、このウィンドウがフォーカスされているか、またはアクティブなウィンドウであると決してみなさないでください。

パラメータ:
b - trueの場合はWindowを表示し、それ以外の場合はWindowを非表示にします。Windowおよびそのオーナーがまだ表示可能でない場合は、両方とも表示可能にします。 Windowは、可視状態にされる前に検証されます。 Windowがすでに可視状態である場合、Windowは前面に移行します。
falseの場合は、このWindow、そのサブコンポーネント、所有されるすべての子を隠します。 #setVisible(true)を呼び出すと、Windowとそのサブコンポーネントをふたたび可視状態にできます。

引数に true を指定すると対象のフレームが表示されます。 true 以外の値を指定すると対象のフレームが非表示となります。

実際の使い方は次のようになります。フレームを作成したあとで setVisible メソッドを使ってフレームを表示しています。

JFrame frame = new JFrame("MyTitle");
frame.setVisible(true);

フレームのタイトルを設定する

JFrame クラスのオブジェクトを作成したあとでフレームのタイトルを設定するには JFrame クラスの親クラスである Frame クラスで定義されている setTitle メソッドを使います。

public void setTitle(String title)

このフレームのタイトルを、指定された文字列に設定します。

パラメータ:
title - フレームのボーダーに表示されるタイトル。 null値は、空の文字列""として処理されます。

引数にはフレームのタイトルとして表示する文字列を指定します。

実際の使い方は次のようになります。フレームを作成したあとで setTitle メソッドを使ってタイトルを設定しています。

JFrame frame = new JFrame();
frame.setTitle("MyTitle");
frame.setVisible(true);
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと Sample.java という名前で保存します。

import javax.swing.JFrame;

class Sample{
  public static void main(String args[]){
    JFrame frame = new JFrame();
    frame.setTitle("MyTitle");
    frame.setVisible(true);
  }
}

次のようにコンパイルを行います。

javac Sample.java

コンパイルが終わりましたら実行します。

java Sample

次のようなフレームが表示されます。

フレームのタイトルを設定する(2)

今回のサンプルではフレームのサイズを指定していないためヘッダー部分のみが表示されています。マウスでフレーム右隅の部分をドラッグして広げてみます。するとタイトルに設定した MyTitle が設定されていることが確認できます。

フレームのタイトルを設定する(3)

なおプログラムを終了する場合は、プログラムを実行したコマンドプロンプト上で [Ctrl+c] で終了して下さい。現時点ではフレームの右上にある「×」ボタンを押してもフレームは閉じますがプログラム自身は終了しないためです。今後のページで「×」ボタンを押すとプログラム自身も終了させる方法を確認します。

フレームのタイトルを設定する(4)

-- --

JFrame クラスの定義やコンストラクタについて確認し、実際に JFrame クラスのオブジェクトを作成してフレームを表示する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。