フレームとパネル

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

JFrameクラス

Swingでは、Frameクラスの代わりにJFrameクラスを使います。
JFrameクラスは、ドキュメントのjavax.swingパッケージに有るので、

import javax.swing.*;

が必要です。
JFrameクラスは、Frameクラスを継承していますから、Frameクラス培った物は、全て有効です。

描画

Swingでも描画しなければならない状況が発生した時には、paintメソッドが呼び出されます。
其の為描画したい内容は、paintメソッドの中に書きます。
しかし其の前に、スーパークラスで有るJFrameクラスの「paint()」を呼び出さなければなりません。

super.paint(g);

を、最初に必ず書いて下さい。

座標系

Swingのフレームでも原点は、ウィンドウの左上隅に有ります。
余り上の方に描画しようとすると、タイトルバーに被って見えないので注意が必要です。

JFrameの終了処理のデフォルト

JFrameでは、×ボタンが押された時の処理を規定する為のメソッドを提供しています。
×ボタンが押され、プログラムを終了したい場合は、コンストラクタ部分に下記の様に書いていました。

addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
                System.exit(0);
        }
});

Swingでは、此の代わりに以下の様に書きます。

setDefaultCloseOperation(EXIT_ON_CLOSE);

実引数には、以下の何れかを指定します。

実引数の処理一覧

実引数 定義されているクラス 動作
DO_NOTHING_ON_CLOSE WindowConstants 終了処理は何もしないので、windowClosingメソッドに終了処理を記述しなければならない
HIDE_ON_CLOSE フレームを隠す(未終了)
DISPOSE_ON_CLOSE フレームを隠した後破棄
EXIT_ON_CLOSE JFrame System.exit(0)を呼び出す

パネルの役割

パネルは、透明なガラス板の様な物です。
フレームに直接GUI部品を配置している状態を例えるなら、机の上に直接「物」が乗っているイメージです。
其の点、パネルは「御盆」の上に乗せた「物(GUI部品)」を机に乗せるイメージです。
其の為、御盆毎位置を変えたり、御盆の中の位置を変えたり、と言う事が自由に出来るのです。

フレームに直接は位置するイメージ 机の上に直接物が乗っている状態
パネルで配置するイメージ 机の上の御盆に物が乗っている状態

パネルクラスを継承した独自クラスの作成

パネルは、JPanelクラスを継承して作成します。
此のクラスには、パネルに何を表示するかを規定します。
FrameクラスやJFrameクラスでは、paint()メソッドをオーバーライドして表示したい内容を書きましたが、JPanelクラスではpaintComponent()メソッドをオーバーライドして、表示したい内容を書きます。
此の時、始めにスーパークラスで有るJPanelクラスの「paintComponent()」を呼び出さなければなりません。

super.paintComponent()

上記を、最初に書いて下さい。

パネルをフレームに載せる

JPanelクラスを継承したクラスをインスタンス化し、此をフレームから取得したコンテナに載せます。
JPanelクラスを継承したクラスを「MyJPanel」とすると、以下の様に書きます。

MyJPanel MyJPanel = new MyJPanel()
Container c = getContentPane(); //コンテナの取得
c.add(myJPanel); //パネルを載せる

パネルは、フレームの表示部分に載せますから、原点は、タイトルバーを除いた左上の点になります。

ソース ダウンロード
JFrameTest.java Test02.zip
JPanelTest.java

戻る