学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

Javaプログラミング入門その19 Frameを用いたプログラム

<<前  [TOP]  次>>


メモ帳を開いて次のプログラムを作ってみましょう。


FrameTest.java 直

import java.awt.Frame;

public class FrameTest {

	public static void main( String argv[] ) {

		Frame frame = new Frame( "Frame Test" );
		frame.setSize( 600, 400 );
		frame.setVisible(true);
	}
}



最初の一行目を見てください。
import java.awt.Frame;


これは、import文を使って最初にjavaのパッケージの中にあるクラスの機能を使うために指定しています。


では、パッケージについて詳しく説明します。


Javaのクラスライブラリでは、様々なクラスを提供しています。
これらのクラスの持つメソッドや変数を活用することで、効率的にプログラムを作成できます。


Javaのクラスライブラリは、パッケージという単位でグループ化されています。


下の表がJavaの主なパッケージです。

パッケージの名称パッケージに含まれているクラス
java.langあらゆるプログラムで使われるような基本的な機能を提供するクラス
java.appletJavaアプレットを作成するためのクラス
java.ioキー入力と画面出力、およびファイル入出力の機能を提供するクラス
java.util日付処理、高度なデータ構造、およびデータの検索などを提供するクラス
java.netネットワーク機能を提供するクラス
java.awtウインドウ形式のユーザーインターフェイスを実現するためのクラス
java.awt.eventウインドウ形式のユーザーインターフェイスでイベントを処理するためのクラス


java.awt.eventはjava.awtの中に格納されているパッケージです(サブパッケージ)。
Javaのクラスライブラリが提供するすべてのパッケージとクラスの情報(Application Programming Interface(API)といいます。)が、ORACLEのホームページ(Java™ Platform, Standard Edition 8 API 仕様)にあります。


パッケージやクラスの種類をすべて暗記する必要はありません。
必要に応じて使っていけば、自然と覚えられるものです。


import java.awt.Frameはjava.awtパッケージのFrameクラスを使うという意味があります。

Frame frame = new Frame( "Frame Test" );

これは、コンストラクタ(Frame)のインスタンス(frame)を生成しています。
( "Frame Test" )はこのフレームの名前です。
表示されるフレームの上のバーに表示されます。

frame.setSize( 600, 400 );

これはFrameクラスのsetSizeメソッドを使用しています。
使い方は以下の通りです。

インスタンス名.setSize(横の大きさ, 縦の大きさ);

このコンストラクタ(メソッド)により、フレームの初期値(大きさ)を決めることができます。

frame.setVisible(true);

このコンストラクタは、フレームを表示させるメソッドです。
このメソッドがないとフレームを表示させることができません。


このプログラムはFrameTestと言う名前のフレームが表示されます。
Java1.4までは「frame.show();」という書き方でフレームが表示されたのですが、Java1.5以降は推奨されていません。


では出力結果を見てみましょう。
×ボタンを押しても消すことはできないので、コマンドプロンプト上でCtr+Cで強制終了して消さなくてはなりません。






メモ帳を開いて次のプログラムを作ってみましょう。


ColorFrame.java 直

import java.awt.*;

public class ColorFrame { 

	public Frame frame;

	public ColorFrame() {
		frame = new Frame( "Color Frame" );
		frame.setSize( 400, 300 );
		frame.setVisible(true);
	}

	public ColorFrame( Color color ) {
		this();
		frame.setBackground( color );
	}

	public static void main( String argv[] ) {

		ColorFrame def = new ColorFrame();
		ColorFrame red = new ColorFrame( new Color( 255,0,0 ) );
		ColorFrame green = new ColorFrame( new Color( 0,255,0 ) );
	}
}


import java.awt.*;

この最後の*はワイルドカードといい、すべてという意味があります。
java.awtパッケージにあるクラス全部を使いますと宣言することになります。


ちなみに、今回は以下のクラスを使っています。

java.awt.Frame;
java.awt.Color;



これらを、

import java.awt.Frame;
import java.awt.Color;

としても問題ありません。

public Frame frame;

これは、インスタンスを生成していません。
インスタンスを宣言しているだけです。
インスタンスは、メソッド内で作成しています。


次の記述を見てください

public ColorFrame() {
	frame = new Frame( "Color Frame" );
	frame.setSize( 400, 300 );
	frame.setVisible(true);
}

これは、自分でコンストラクタを作成しています。
まず、クラス名と同じコンストラクタ名にします。
次に初期条件を内部に記述します。
今回は、インスタンスの生成、大きさの設定、フレームの表示です。
frame = new Frame( "Color Frame" )
メソッドの外でインスタンスを宣言していますので、最初のコンストラクタ名を省略できます。


次の記述を見てください。

public ColorFrame( Color color ) {
    this();
    frame.setBackground( color );
}

これも、自分で作ったコンストラクタです。
この、this()というのは、同じコンストラクタ名の内容をそのまま使うといった意味を持っています。
なので、このように書き換えることができます。

public ColorFrame( Color color ) {
    frame = new Frame( "Color Frame" );
    frame.setSize( 400, 300 );
    frame.setBackground( color );
    frame.setVisible(true);
}


frame.setBackground( color );

このメソッドもJavaパッケージのColorクラスのメソッドで、フレームの背景色を決めることができます。
指定しなければ白色になります。
これをデフォルトといいます。
引数にはColorクラスでインスタンスを生成したものを用います。

ColorFrame def = new ColorFrame();
ColorFrame red = new ColorFrame( new Color( 255,0,0 ) );
ColorFrame green = new ColorFrame( new Color( 0,255,0 ) );

これは、mainメソッドの記述ですが、それぞれ、自分で作成したコンストラクタのColorFrameでインスタンスを作成しています。
インスタンスを作成するとそのコンストラクタが呼び出され、実行されます。

ColorFrame def = new ColorFrame();

これには、引数のcolorが入っていませんので、色はデフォルトの白となります。

ColorFrame red = new ColorFrame( new Color( 255,0,0 ) );

この引数のcolorはRGBで表されます。
これは、色の三原色(RED,GREEN,BLUE)で表します。
表す方法は、0から255の数字で割合を決めていきます。
青だと、(0、0、255)になります。


引数をnew Color( 255,0,0 )の様にして使っていますが、これはこの場所だけ使って消える記述方法です。
色の記憶を残しておきたいときは、
Color color = new Color(255, 0, 0);
として、
ColorFrame red = new ColorFrame( color );
とします。


メモリを使う必要がないと思ったら、このようにしてnew演算子を使うことで簡単に書くこともできますので覚えておいてください。


出力結果では3つの色違いのフレームが出てきます。
白、赤、緑のフレームが順番に重なっています。
ドラッグして移動すると隠れているフレームが出てきます。
これも×ボタンを押しても消すことはできないので、コマンドプロンプト上でCtr+Cで強制終了して消さなくてはなりません。








メモ帳を開いて次のプログラムを作ってみましょう。


ColorFrameTest.java 直

import java.awt.*;

public class ColorFrameTest {

	public static void main( String argv[] ) {

		ColorFrame def = new ColorFrame();
		ColorFrame red = new ColorFrame( new Color( 255, 0, 0 ) );
	}
}



このクラスは、ColorFrame.javaがないと動きません。
このように、別のクラスのコンストラクタも普通に使うことができます。
他のクラスのコンストラクタを使用する場合でも、使用パッケージの宣言(import java.awt.*;)は省略できませんので気をつけてください。


出力結果は、2つの色違いのフレームが出てきます。
白、赤のフレームが順番に重なっています。
ラッグして移動すると隠れているフレームが出てきます。
これも×ボタンを押しても消すことはできないので、コマンドプロンプト上でCtr+Cで強制終了して消さなくてはなりません。








メモ帳を開いて次のプログラムを作ってみましょう。


ColorFrameTest2.java 直

import java.awt.*;

public class ColorFrameTest2 {

	public static void main( String argv[] ) {

		ColorFrame frames[][] = new ColorFrame[3][2];

		for( int i=0; i<frames.length; i++ ) {
			for( int j=0; j<frames[0].length; j++ ) {
				frames[i][j] 
				= new ColorFrame( new Color( 0,j*32,i*32 ) );
			}
		}
	}
}



コンストラクタを使ったインスタンスの生成に、配列を使用することができます。

ColorFrame frames[][] = new ColorFrame[3][2];

この記述により、インスタンスの配列を格納する箱framesが作られます。

frames[i][j] = new ColorFrame( new Color( 0,j*32,i*32 ) );

これにより、framesの箱に作成されたインスタンスがfor文のループによって埋められていきます。
インスタンスが作成された時に実行され、いろいろな色のフレームが表示されます。


実行結果では、いろいろな色のフレームが6種類出てきます。
ドラッグして移動すると隠れているフレームが出てきます。
これも×ボタンを押しても消すことはできないので、コマンドプロンプト上でCtr+Cで強制終了して消さなくてはなりません。









<<前  [TOP]  次>>