Java 簡単な応用プログラム ( その 2) Java は すでにある部品群を上手く使ってプログラムを組み立てます 前回と同様に Frame を使って ウインドウを表示するプログラムを作りましょう. Frameは ウインドウを作るための部品で フレーム ( 枠 ) とタイトルおよび, 決められた仕組みが入っています. java.awt パッケージは, ウインドウ関連の部品が多くあります. javax.swing パッケージに同様なウインドウ関連の部品があり 最近はこれを使うケースが多いです.
2. ウィンドウの中でマウスがクリックされたところに長方形を書くプログラム このプログラムは 先週のプログラムに次の3 点を加えます 1. マウスがクリックされる イベント処理にマウスアダプタを加える 2. イベントが発生したら ウインドウに長方形を描け と指示する 3. マウスアダプタを作成し登録する マウスアダプタ (MouseAdapter) クラスが用意され これを継承したOurMouseAdapterクラスを作る Class OurMouseAdapter extends MouseAdapter; そこで MouseClicked メソッドを自分用に書き換える ( オーバーライド ) 1マウスをクリックした場所の x, y 座標を取る. ( x,y は int ) x = e.getx( ); y = e.gety( ); Graphics g = getgraphics( ); // 2 図形を描くオブジェクトを作り g とする. g.setcolor(color.red); // 3 図形の色は赤 g.fillrect(x-30,y-20,60,40); //4マウスをクリックした場所を中心として長方形を描いて塗りつぶす System.out.println( 長方形を描いた ); 0 X x X 軸 X=x-30, Y=y-30 何度でも長方形を描くことが出来る. また終了ボタンでウインドウが閉じる. Y y Y 軸 60 40 2. ウィンドウの中でマウスがクリックされたところに長方形を書くプログラム Frameを使った場合 Main.java と MakeFrame パッケージ名 :framep2 Mainクラス ( 前と同様 ) package framep2; public class Main{ public static void main(string[] args){ MakeFrame f = new MakeFrame(); f.setvisible(true); System.out.println("Frame2 を作りました "); MakeFrameクラスのコピーを f として作ります オブジェクト f を見えるようにします コンソールに Frame を作ったと表示します
MakeFrame クラス awt と呼ばれる部品群を使います Package framep2; import java.awt.*; MakeFrameクラスをFrameのサブクラスとして定義 import java.awt.event.*; コンストラクタ : MakeFrameクラスのインスタンスが作られた時に起動 class MakeFrame extends Frame{ public MakeFrame(){ ウインドウ範囲 setsize(400,400); タイトル settitle( (" マウスをクリックして長方形を作る "); Window アダプタのコピーを作り, OWA とする OurWindowAdapter Owa = new OurWindowAdapter(); addwindowlistener(owa); Windowにリスナをつけ, イベントを聞けるようにする OurMouseAdapter Oma = new OurMouseAdapter(); マウスアダプタのコピーを作り, Oma とする addmouselistener(oma); マウスアダプタにリスナーをつけ, イベントを聞けるようにする class OurWindowAdapter extends WindowAdapter{ public void windowclosing(windowevent e){ Windowアダプタクラスの定義 System.out.println("Frame2 をクローズしました "); System.exit(0); マウスアダプタクラスの定義 マウスがクリックされた時の動作の定義 class OurMouseAdapter extends MouseAdapter{ マウスのx 座標を取り変数 x に代入 public void mouseclicked(mouseevent e){ int x, y; マウスのy 座標を取り変数 y に代入 x = e.getx(); Frameに図形を描くためGraphic オブジェクトを作成 y = e.gety(); し g とします Graphics g = getgraphics(); g.setcolor(color.red); 図形の色を赤とします g.fillrect(x-30, y-20, 60, 40); 長方形を描いて中を塗りつぶします System.out.println(" 長方形を描いた "); g.dispose(); オブジェクト g をメモリから消滅させます Graphicsクラスの主なメソッド drawstring(string str,int x, int y); // str : 文字列 x,y: 最初の文字の位置 ( 座標 ) drawline(int x1,int y1,int x2,int y2); // 座標 (x1,y1) から (x2,y2) まで直線を引く drawrect(int xintyintwidth x,int y,int width,intint height); //(xy) //(x,y) を始点に width,heightheight の長方形を描く fillrect(int x,int y,int width,int height); //drawrectと同じ 長方形の中が塗りつぶされる drawoval(int x,int y,int width,int height); // 楕円を描く (x,y) 楕円がぴったり収まる長方形の左上隅 fillovel(int x,int y,int width,int height); // drawovalと同じ ただし楕円の中が塗りつぶされる 描画カラー黒青緑水色赤紫黄色白明るい灰色灰色暗い灰色桃色橙色 文字変数 Color.black Color.blue Color.green Color.cyan Color.red Color.magenda Color.yellow Color.white Color.lightgray Color.gray Color.darkgray Color.pink Color.orange
2. ウィンドウの中でマウスがクリックされたところに長方形を書くプログラムを jframe で作ってみましょう パッケージ名 :jframe2 ( 前と同様 ) package jframe2; public class Main { public static void main(string[] args) { MakeJFrame jf = new MakeJFrame(); MakeJFrameクラスのコピーを jf として作ります jf.setvisible(true); System.out.println("JFrame1 を作りました "); インスタンスjfを見えるようにしますコンソールに Jframeを作ったと表示します MakeJFrame クラス package jframe2; import java.awt.event.*; awt import java.awt.*; import javax.swing.*; public class MakeJFrame extends JFrame{ public MakeJFrame(){ setsize(400,400); settitle(" マウスをクリックして長方形を作る "); OurMouseAdapter Oma = new OurMouseAdapter(); addmouselistener(oma); setdefaultcloseoperation(jframe.exit_on_close); class OurMouseAdapter extends MouseAdapter{ public void mouseclicked(mouseevent e){ int x, y; x = e.getx(); y = e.gety(); Graphics g = getgraphics(); g.setcolor(color.red); g.fillrect(x-30, y-20 20, 60, 40); System.out.println(" 長方形を描いた "); g.dispose(); MakeJFrameクラスをJFrameのサブクラスとして定義します コンストラクタ : MakeJFrame クラスのオブジェクトが作られた時に起動 マウスアダプタのコピーを作り, Oma とする マウスアダプタにリスナーをつけ, イベントを聞けるようにする Windowを閉じる処理マウスアダプタクラスの定義 マウスクリック時の動作定義 マウスの x 座標を取り変数 x に代入 マウスの y 座標を取り変数 y に代入 Frame に図形を描くため Graphic オブジェクトを作成し g とします 図形の色を赤とします 長方形を描いて中を塗りつぶします オブジェクト g をメモリから消滅させます
前回のプログラム (1) を JFrame で作ってみましょう Main.java と MakeJFrame パッケージ名 :jframe1 Mainクラス package jframe1; public class Main { public static void main(string[] args) { MakeJFrame jf = new MakeJFrame(); jf.setvisible(true); System.out.println("JFrame1 を作りました "); します MakeJFrameクラスのコピーを jf として作ります インスタンス jf を見えるようにします コンソールに Jframe を作ったと表示します MakeJFrame クラス package jframe1; import java.awt.*; import javax.swing.*; public class MakeJFrame extends JFrame{ public MakeJFrame(){ settitle(" 都立産業技術高専情報通信工学コース JFrame1"); setsize(400,200); JLabel label1 = new JLabel("Java のプログラムを作りましょう ", JLabel.CENTER); Container cont = getcontentpane(); cont.add(label1); awt と呼ばれる部品群を使います swing と呼ばれる部品群を使います MakeJFrame クラスを JFrame のサブクラスとして定義します コンストラクタ : MakeJFrame クラスのオブジェクトが作られた時に起動 タイトルウインドウの範囲 ラベル label1 label1 を cont に加えます 横の中央に配置 コンテナ のコピーを cont として作ります setdefaultcloseoperation(jframe.exit_on_close); MakeJFrame を閉じます
1_2: 背景色を赤にする場合は 少し面倒です Main.javaと MakeJFrame パッケージ名 :jframe1_2 ( 前と同じ ) package jframe1_2; public class Main { public static void main(string[] args) { MakeJFrame jf = new MakeJFrame(); MakeJFrame クラスのコピーを jf として作ります jf.setvisible(true); System.out.println("JFrame1 を作りました "); インスタンス jf を見えるようにします コンソールに Jframe を作ったと表示します Javaの実践 MakeJFrameクラス package jframe1_2; import java.awt.*; import javax.swing.*; public class MakeJFrame extends JFrame{ public MakeJFrame(){ settitle( 産技高専情報通信工学コース JFrame1"); setsize(400,200); JPanel p = new JPanel(); p.setbackground(color.red); JLabel label1 = new JLabel("Javaのプログラムを作りましょう "); label1.setpreferredsize(new Dimension(400,200)); label1.sethorizontalalignment(jlabel.center); label1.setverticalalignment(jlabel.center); p.add(label1); label1をパネルpに付ける Container cont = getcontentpane(); cont.add(p); setdefaultcloseoperation(jframe.exit_on_close); awt と呼ばれる部品群を使います swingと呼ばれる部品群を使います MakeJFrameクラスをJFrame のサブクラスとして定義します コンストラクタ : MakeJFrameクラスのオブジェクトが作られた時に起動タイトルウインドウ範囲パネルの設定パネルに背景色を赤にする ラベル label1 ラベル label1を置くスペースス label1を縦の中央に置く Label1を横の中央に置く コンテナのコピーを cont として作ります パネル p をコンテナーに加える MakeJFrame を閉じます