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 コンポーネントを中央を中心にして、東西南北に配置。 North West Center East South 書式: 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 );) BoaderLayout 配置の位置 北 設定名 中央 南 東 西 “Center”または、BorderLayout.CENTER “South” または、BorderLayout.SOUTH “East” または、BorderLayout.EAST “West” または、BorderLayout.WEST “North” または、BorderLayout.NORTH 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) (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.fillRect(x位置、 y位置、幅、高さ) g.drawRect(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); } 実行結果
© Copyright 2024 ExpyDoc