welcome: please sign in

2009-12-02 01:00:32時点のリビジョン30

メッセージを消す
location: ウインドウの内容

ウインドウの内容

窓は窓枠と窓ガラスでできています。

窓枠に対応するのがJFrameです。

窓ガラスがはまる部分に処理内容に対応した部品を配置し、配置したインスタンスを通して処理を行います。 部品にはボタンやメニューなどもあります。


部品の配置

JFrame, Container, JPanelの3つのクラスを利用しています。

12~16行目はウインドウ枠の処理です。ウインドウの表示を参照。

枠の内側で部品を配置できる場所をContentPaneと呼び、クラスはContainerです。

この結果インスタンスの状態はこのようになります。


描画

GUIではプログラムの実行開始時にだけ、ウインドウ内部が描画されるわけではありません。

ウインドウの大きさが変えられたり、ボタンが押されたり、文字が入力されたり など、いろいろな場面で描画が行われます。

JPanelクラスのpaintComponentメソッドではプログラムで表示内容を指定できません。

サブクラス名を Lesson10 とした例を示します。

paintComponentは引数としてGraphicsクラスのインスタンスをとります。 この例では変数名をgとしています。

描画はインスタンスgに対してメソッドを使って指示します。

drawRectは長方形を描くメソッドです。 引数は左上のx座標,y座標,横幅,縦幅です。

座標系は図のとおりです。


上のサンプルプログラムSample3でJPanelとなっていた箇所を、 このクラス(Lesson10)で置き換えます。

するとContainerに配置されるのはLesson10クラスのインスタンスとなり、 描画が必要なときにはLesson10クラスのpaintComponentが実行されます。

変数宣言は

のままでもかまいません。理由は継承のところで説明しました。


mainメソッドをどこに記述するか

mainメソッドは特殊なメソッドで、どのクラス内に記述するかはあまり意味を持ちません。

コマンド

を行うと、そのクラス内のmainメソッドが実行されるだけです。

クラスの機能は普通のメソッドとして記述し、 mainメソッドは主として動作確認のために使ってきました。

例1

上のサンプルではLesson10.javaでクラスを定義し、 Sample3.javaにLesson10クラスを利用するmainメソッドを記述しています。

この場合、コンパイル後

で実行できます。

コンパイルは2つのファイルを別々に行っても良いし、 mainメソッドのあるSample3.javaをコンパイルすれば一緒にコンパイルされます。

例2

ウインドウを作成し表示するためのmainメソッドを、 Lesson10クラス内に記述すれば Lesson10.javaだけを作成、コンパイルし

で実行できます。(プログラムは1つのファイルで済みます)