JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

Ver 準備 Java フォルダに移動して …… mkdir Swing Swing フォルダに移動して …… cp ~gundam/Java/Swing. コマンドプロンプト ( JDK ) でないと起動 しないので注意!!!
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
         第9回 Swing.
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
Applet 岡部 祐典 鈴木 敬幸.
GUIコンポーネントの設定と配置 Creation and positioning of GUI components
JAVA GUIプログラミング 第6回 TextFieldとLabel.
オブジェクト指向言語 第12回 アプレット.
JAVA GUIプログラミング 第1回 JAVAの実行 絵を描こう.
アプレット (Applet)について.
1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)
Iアプリプログラミング その1  鳥居秀徳.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JAVA.
Javaレクチャー ーSwing入門ー.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
 Applet アプレット ◇長い長いアプレット講座◇.
第14回 GUIの構成とイベント・ドリブン ~GUIを使ったプログラム(Ⅰ)~.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
例外処理 Exception Handling
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
第14回独習Javaゼミ セクション1~3 発表者 直江 宗紀.
アプレット プログラミング 第10回 アプレット プログラミング第10回.
第11回 GUI(グラフィカル・ユーザ・インターフェース)の設計
プログラミング演習3 第2回 GUIの復習.
プログラミング演習3 第3回 ミニプロジェクト.
アルゴリズムとデータ構造演習(6月24日) グラフィックス、その2 テキストフィールドで入力する チェックボックスで1つ以上指定する
Java入門 13.5カラーの使用 13.6テキストの表示                  2003/12/12                   紺野憲一.
Java/Swingについて (2) 2005年10月11日 海谷 治彦.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
JAVA入門後期⑦ JAVAのSwingの基本構造
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第15回独習Javaゼミ セクション14~15 発表者 直江宗紀.
プログラミング演習3 第3回 ミニプロジェクト.
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
Java/Swingについて (3) 2005年10月19日 海谷 治彦.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
JAVA入門後期③ JAVAのGUI (JavaのGUI基本構造、いろいろなアプレット)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
システムエンジニアリング演習 GUIの実現(1):AWT 11月6日.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
Smart Graphic Layout トピック ステートメント 赤色の背景に画像を含む SmartArt グラフィック (中級)
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
GUI部品とイベント処理の例 マインスィーパもどきの作成 倉敷芸術科学大学 産業科学技術学部 梶浦文夫.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
スライドの終わりまでテキストが繰り返しスクロールされます • スライドの終わりまでテキストが繰り返しスクロールされます •
サンプル見出し テキスト 1 行目 テキスト 2 行目 テキスト 3 行目 (中級) 図の背後でタイトルを移動させるアニメーション効果
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)

AWTにつきまして AWTにつきまして  1.AWT (Abstract Window Toolkit)は、Java で GUIアプリケーションを作成するためのクラスライブラリです。 GUIアプリケーションを作成することが可能です。 2.AWTにはボタン、ラベル、数種類のコンポーネントが用意されています。ラベル、ボタンにはGIF、JPEGなどのイメージが表示されません。 3. AWTはコンポーネントの配置が相対的に行われます。アプレットの場合、デフォルトはFlowLayoutマネジャーで流動的配置が行われます。不便な場合もあり、他のレイアウトマネジャーも用意されています。

レイアウトマネジャー レイアウトマネジャー ボタン・テキストフィールドのコンポーネント配置 に関し、いくつかの考えがあり、それらの配置 方針を反映したレイアウトマネジャーが用意さ れている。デフォルトのままのアプレットでは、 「FlowLayout」というレイアウトマネジャーが実 装されている。

レイアウトマネジャー 名前 説明 FlowLayout 左上から順に詰めていく BorderLayout 上下左右と中央の位置に最大5つの配置 CardLayout 同じ大きさのコンポーネントを重ね合わせて配置 GridLayout 格子状に配置 GridBagLayout 格子状に配置、柔軟な配置指定可能

FlowLayout ◎左上から順に詰めていくように配置。 書式 書式  FlowLayout(int alignment, int hgaps, int vgaps) alignment : コンポーネントの配置位置 設定位置は以下。 ・ FlowLayout.CENTER  行内で中央揃え ・ FlowLayout.RIGHT    行内で右揃え ・ FlowLayout.LEFT   行内で左揃え ・ FlowLayout.TRAILING  行内で右端揃え ・ FlowLayout.LEADING  行内で左端揃え hgaps : コンポーネントの水平方向の間隔 vgaps : コンポーネントの垂直方向の間隔

FlowLayout デフォルトの設定 setLayout(new FlowLayout()); は setLayout(new FlowLayout(FlowLayout.Center,5,5) と同様。

FlowLayout 例 import java.awt.*; import java.applet.*; /* <APPLET CODE="FlowLay1.class" WIDTH=400 HEIGHT=120> </APPLET> */ public class FlowLay1 extends Applet{ public void init(){ setLayout(new FlowLayout()); //デフォルトは、FlowLayout(FlowLayout.Center,5,5)と同様

Button btn1 = new Button("ボタン1"); add(btn1); Button btn2 = new Button("ボタン2"); add(btn2); Button btn3 = new Button("ボタン3"); add(btn3); } public void paint(Graphics g){  g.setColor(Color.blue); g.setFont(new Font("Serif", Font.BOLD + Font.ITALIC, 26)); g.drawString("FlowLayoutの ", 50, 100); //←x,y g.setColor(Color.red); g.drawString(" テスト!", 220, 100);

FlowLayout 実行結果

BoaderLayout コンポーネントを中央を中心にして、東西南北に配置。 書式: BoaderLayout(int hgaps, int vgaps) hgaps:水平方向の間隔  vgaps:垂直方向の間隔 指定の方法: setLayout(new BoaderLayout(5,5)); Button bt1 = new Button(“button-North”); add(bt1, “North” ); (または add(bt1, BoaderLayout .NORTH );) North West Center East South

BoaderLayout 配置の位置 北 “North” または、BorderLayout.NORTH 中央 設定名 北 “North” または、BorderLayout.NORTH 中央 “Center”または、BorderLayout.CENTER 南 “South” または、BorderLayout.SOUTH 東 “East” または、BorderLayout.EAST 西 “West” または、BorderLayout.WEST

BoaderLayout 例 import java.awt.*; import java.applet.*; /* <APPLET CODE="BorderLay1.class" WIDTH=400 HEIGHT=220> </APPLET> */ public class BorderLay1 extends Applet { public void init(){ setLayout(new BorderLayout()); //デフォルトは、BorderLayout(5,5)と同様t

Button btn1 = new Button("ボタン1"); add(btn1, "North"); Button btn2 = new Button("ボタン2"); add("South", btn2); Button btn3 = new Button("ボタン3"); } public void paint(Graphics g) { g.setColor(Color.blue); g.setFont(new Font("Serif", Font.BOLD + Font.ITALIC, 26)); g.drawString("BorderLayout の ", 50, 100); //←x,y g.setColor(Color.red); g.drawString(" テスト!", 220, 100);

BoaderLayout 実行結果

GridLayout コンポーネントを指定された配列の格子状に配置 書式  GridLayout(int rows, int colums int haps, int vgaps) rows 行の数 colums 列の数 haps 水平方向の間隔 vgaps 垂直方向の間隔 配置される順番はaddメソッドの順に左上から右方向に配置 「行数×列数」>コンポーネントの場合、不足分は空きとなる。 「行数×列数」<コンポーネントの場合、列数が増加。

GridLayout import java.awt.*; import java.applet.*; /* <APPLET CODE="GridLay1.class" WIDTH=400 HEIGHT=220> </APPLET> */ public class GridLay1 extends Applet { public void init() { setLayout(new GridLayout(2, 3));

Button btn; for (int i = 1; i <= 9; i++){ add(btn = new Button("ボタン" + Integer.toString(i))); } public void paint(Graphics g){ g.setColor(Color.blue); g.setFont(new Font("Serif", Font.BOLD + Font.ITALIC, 26)); g.drawString("GridLayoutの ", 50, 270); g.setColor(Color.red); g.drawString(" テスト!", 220, 270);

GridLayout 実行結果

nullLayout(絶対位置の指定) Layoutマネジャーを使わないで、コンポーネントを指定した任意 の位置に配置することが可能です。 コンポーネントを任意の位置へ配置可能。コンポーネントの大 きさも自由に設定可能。 コンポーネントの配置として絶対位置を指定するには、 setLayout(null); と宣言。 この後、コンポーネントのオブジェクトを生成し、「大きさ」、「配 置位置」を決定。コンポーネントの配置する位置、大きさは 「setBoundsメソッド」で指定。

nullLayout(絶対位置の指定) 書式 SetBounds(int x, int y, int width, in height) 書式  SetBounds(int x, int y, int width, in height) (x,y) コンポーネントの配置位置 Width コンポーネントの幅 Height コンポーネントの高さ コンポーネントの「配置位置」と「大きさ」は別々 のメソッドで指定も可能です。 書式 オブジェクト名.setLocation(x,y) オブジェクト名.setSize(width, height)

nullLayout(絶対位置の指定) import java.awt.*; import java.applet.*; /* <APPLET CODE="setBond1.class" WIDTH=400 HEIGHT=300> </APPLET> */ public class setBond1 extends Applet{ public void init(){ setLayout(null); Button btn1 = new Button("ボタン1"); btn1.setBounds(100, 100, 60, 50); add(btn1);

Button btn2 = new Button("ボタン2"); btn2.setBounds(100, 150, 60, 50); add(btn2); Button btn3 = new Button("ボタン3"); btn3.setBounds(100, 200, 60, 50); add(btn3); } public void paint(Graphics g){ g.setColor(Color.blue); g.setFont(new Font("Serif", Font.BOLD + Font.ITALIC, 26)); g.drawString("setBounds の ", 50, 60); g.setColor(Color.red); g.drawString(" テスト!", 220, 60);

nullLayout(絶対位置の指定) 実行結果

ウインドウ型アプリケーション FrameクラスとDialogクラス Javaでは独自の「窓」をもつウインドウ型アプリケー ションを作りことができます。Javaのウインドウ機能は 「Windowクラス」で実現されます。Windowクラスは 「Frame」「Dialog」という2つのサブクラスを持ちます。 実際のプログラミングではWindowクラスを継承した Frameクラスを用います。また小窓(データ入力、表示 等)を持つプログラミングではDialogを用います。 さらにファイル選択機能をもつFileDialogクラスがあり ます。

ウインドウ型アプリケーション 基本構成 class クラス名 extends Frame{ ・・・ public void paint(Graphics g){ *** } }

表示形式 ***の位置に入る記述 文字列表示 g.drawString(“文字列”、x位置、 y位置) 円、楕円 g.drawOval(x位置、 y位置、幅、高さ) 塗りつぶし g.fillOval(x位置、 y位置、幅、高さ) 矩形 g.drawRect(x位置、 y位置、幅、高さ) g.fillRect(x位置、 y位置、幅、高さ) 画像 g.drawImage(img、x位置、 y位置、this)

ウインドウ型アプリケーション 窓の表示 1.タイトル表示 setTitle(“タイトル文字列”); 2.背景色  setBackgroud(Color.yellow); 3.窓のサイズ  xxx.setSize(横、縦); 4.表示・非表示   xxx.setVisible(true);  xxx.setVisible(false);  

ウインドウ型アプリケーション 5.窓を閉じる(閉じるボタン)の記述 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e ){ System.exit(0); } }); exit()メソッドはプログラムを終了し、システムに制御 を返すもので、正常時:0 エラー時 1以上とするの が慣習

ウインドウ型アプリケーション 6.部品配置 アプレットの部品配置は、FlowLayoutがデフォ ルト。フレームではBorderLayoutがデフォルト。 以下のようにして、絶対配置とするほうが便利。 Button btn; setLayout(null); //レイアウトを止める。 btn= new Button(“表示”); btn.addActionListener(this);  //リスナ登録 add(btn); btn.setBounds(x、y、幅、高さ); //配置決め

ウインドウ型アプリケーション 7.コンポーネントとイベント処理  ボタン、などのコンポーネントやイベント処理はアプレットの方法をそのまま利用できます。 8.画像表示 アプレットではgetImage()があり、 img = getImage(getDocmentBase()、画像file名); フレームの場合 Toollkit tk; tk = Toollkit.getDefaultToollkit(); img = tk. getImage(画像file名);

ウインドウ型アプリケーション 9.ウインドウ型アプリケーションの起動 コマンドラインから、 java XXX として起動されます。 Windowsではアクティブなままなので、ウインドウを閉 じないとコマンドラインの操作にもどれないので、 この不都合の解消のため javaw XXX とすると、ウインドウ表示され、すぐにコマンドライン の操作も可能です。UNIXはそもそもマルチプロセスな ので、 java XXX & とすれば、バックグラウンドで実行され、コマンドライン の操作も可能です。

例.描画 import java.awt.*; import java.awt.event.*; class MyFrame extends Frame{ public MyFrame(String title){ setTitle(title); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); public void paint(Graphics g){ String ss = "ABCabc"; int aa = 20, height=30, width=140;

g.drawString(ss,aa, 50); g.setFont(new Font("Serif", Font.BOLD, 24)); g.drawString(ss,aa, 80); g.drawRect(aa, 90, width, height); g.fillRect(aa, 130, width, height); } public class FrmSamp1{ public static void main(String args[]){ MyFrame frm = new MyFrame("描画"); frm.setSize(230,180); frm.setVisible(true);

実行結果

例2.マウス import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements MouseListener{ int x1=-1, y1, x2 = 999, y2; public MyFrame(String title){ setTitle(title); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); addMouseListener(this);

public void paint(Graphics g){ if (x1 != -1){ if(x2 != -1){ g.drawLine(x1,y1, x2,y2); } else { g.fillRect(x1,y1,1,1); public void mouseEntered(MouseEvent me){} public void mouseExited(MouseEvent me){}

public void mouseClicked(MouseEvent me){ if (x2 != -1){ x1 = me.getX(); y1 = me.getY(); x2 = -1; }else { x2 = me.getX(); y2 = me.getY(); } repaint(); public void mousePressed(MouseEvent me){} public void mouseReleased(MouseEvent me){}

実行結果 public class FrmSamp2{ public static void main(String args[]){ MyFrame frm = new MyFrame("マウス"); frm.setSize(300,200); frm.setVisible(true); } 実行結果

例3.コンポーネント利用 import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ActionListener{ Button btn; TextField txt; public MyFrame(String title){ setTitle(title); setLayout(null); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); btn= new Button("表示"); btn.addActionListener(this); add(btn);

btn.setBounds(60,70,100,25); txt=new TextField(""); add(txt); txt.setBounds(40,40,140,20); } public void actionPerformed(ActionEvent e){ txt.setText("ボタン押下"); public class FrmSamp3{ public static void main(String args[]){ MyFrame frm = new MyFrame("コンポーネント"); frm.setSize(220,120); frm.setVisible(true);

実行結果