![]()
![]()
![]()
AWTの基本的な使い方のメモ
LastUpdate : 07/01/19
AWT(Abstract Window Toolkit)の使い方についての、基本的な使い方のメモです。
内容はJDK1.2を基準にしています(しかし可変長引数を使っているところも有り1.5以上でないと動かないものがあります)。
内容についてですが、私が昔初めてJavaをさわった時に読んでいた『独習Java』(翔泳社)を参考にしています。
この本を読み、内容を理解し、理解した内容を、私が作成したサンプルコードと共にここに書き出しています。
Componentクラスがそれぞれのコントロールの親のクラスです。「 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Component.html 」。これを基本にして、作成していきます
私の感覚では、目新しい単語が三つほどでてきました。それが以下のものです。
・ソース : 入力などが発生した場合、リスナにイベントを送信するのが仕事。
・リスナ : ソースから送信されたイベントを受信するのが仕事。
・アダプタクラス : リスナのインターフェイスのメソッドを、仮のメソッドですべて実装してある便利クラス。
ソースからイベントが発信されてそれを受信したリスナが、そのイベントの種類によって、あらかじめ決められているメソッドを呼び出す、という処理を行なうみたいです。
おのおののイベントクラスの上位には、AWTEventクラスがあります。AWTEventの親はEventObject、EventObjectの親はObjectクラスとなっています。
マウスのイベントのリスナは MouseListenerインターフェイス , MouseMotionListenerインターフェイス を使います。これらのインターフェイスのメソッドを実装することで、それぞれのイベントに対しての処理を書くことができます。
☆ マウスの動きをキャッチする。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/*
<applet code="TestMain" width=640 height=480>
</applet>
*/
public class TestMain extends Applet implements MouseListener,MouseMotionListener
{
String m_Msg; //表示するメッセージ
int m_x,m_y; //マウスのイベントが発生したときの座標。
//---------------------------------------------
//アプレットのメソッド
public void init()
{
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g)
{
StringBuffer Buf = new StringBuffer();
Buf.append(getMsg());
Buf.append("座標: "+GetCoordinatesX()+","+GetCoordinatesY());
g.drawString(Buf.toString(),50,50);
}
//---------------------------------------------
//メソッドの内部で使われる便利なメソッド
void showMessage(String Mes,MouseEvent Me)
{
setMsg(Mes);
setMouseCoordinates( Me.getPoint() );
repaint();
}
void setMsg(String Str)
{
m_Msg = new String(Str);
}
void setMouseCoordinates(Point P)
{
m_x = P.x;
m_y = P.y;
}
String getMsg(){ return m_Msg; }
int GetCoordinatesX(){ return m_x; }
int GetCoordinatesY(){ return m_y; }
//---------------------------------------------
//MouseListenerインターフェイスの実装
public void mouseClicked(MouseEvent Me)
{
showMessage("マウスのボタンがクリックされました。",Me);
}
public void mouseEntered(MouseEvent Me)
{
showMessage("マウスがウインドウの中に入りました。",Me);;
}
public void mouseExited(MouseEvent Me)
{
showMessage("マウスがウインドウの中から出て行きました。",Me);
}
public void mousePressed(MouseEvent Me)
{
showMessage("マウスのボタンが押されました。",Me);
}
public void mouseReleased(MouseEvent Me)
{
showMessage("マウスのボタンが放されました",Me);
}
//---------------------------------------------
//MouseMotionListenerのインターフェイスの実装。
public void mouseDragged(MouseEvent Me)
{
showMessage("マウスのボタンがドラッグされています。",Me);
}
public void mouseMoved(MouseEvent Me)
{
showMessage("マウスが動いています。",Me);
}
//---------------------------------------------
//このクラスのコンストラクタ
public TestMain()
{
m_Msg = new String("まだ何もされてません。");
repaint();
}
}
|
Labelは文字列を表示するコントロールです。エディットボックスとの違いは、ユーザーからの入力を前提としていないことでしょうか?
また、表示位置は、指定することができません(勝手にてきとうな場所に配置される)。どうしても、位置を指定したい場合は、Panelなどのコントロールの上に作成しなければなりません。
実行してみるとわかるのですが、 \n の改行記号をあっさりと無視してくれます。Graphics::drawStringメソッドも改行記号などを無視しますので、同じ仕様なのでしょうか?
☆ Labelコントロールを作成する。
import java.applet.*;
import java.awt.*;
public class AwtTest2 extends Applet
{
public void init()
{
Label Lbl = new Label("ラベルです。\nこれが文字列です。",Label.CENTER);
add(Lbl);
}
}
|
ボタンコントロールの使い方です。
☆ ボタンコントロールの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest3 extends Applet implements ActionListener
{
Label m_Lbl;
public void init()
{
//メッセージ表示用のラベルを作成。
m_Lbl = new Label("ボタンを押してください。");
add(m_Lbl);
//ボタンを作成。
Button Btn1 = new Button("test1");
Btn1.addActionListener(this);
add(Btn1);
Button Btn2 = new Button("test2");
add(Btn2);
Btn2.addActionListener(this);
}
//ActionListenerインターフェイスのメソッドの実装。
public void actionPerformed(ActionEvent Ae)
{
if( "test1".equals( Ae.getActionCommand() ) )
m_Lbl.setText("test1ボタンが押されました。");
else if( "test2".equals( Ae.getActionCommand() ) )
m_Lbl.setText("test2ボタンが押されました。");
}
}
|
CanvasはGraphicsインターフェイスで描画できる、描画領域のことのようです。Graphicsインターフェイスを通して、いろんなイメージが描画できます。
独自クラスにCanvasクラスを継承し、paintメソッドをオーバーライドして使うようです。
サンプルでは、キャンバスに、円を描いてみました。
Canvasクラスの内容は「 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/awt/Canvas.html 」を参照。
☆ Canvasクラスの使い方。
import java.applet.*;
import java.awt.*;
public class AwtTest4 extends Applet
{
AwtTest4_Canvas m_ImgArea;
public void init()
{
m_ImgArea = new AwtTest4_Canvas();
//キャンバスのサイズを設定する。
m_ImgArea.setSize(640,480);
//コンテナにキャンバスの追加。
add(m_ImgArea);
}
}
//Canvasクラスを継承し、メソッドをオーバーライドすることで
//独自処理を実行させる。
class AwtTest4_Canvas extends Canvas
{
public void paint(Graphics g)
{
g.drawArc( 10,10,300,300,0,360 );
}
}
|
チェックボックスの使い方です。
☆ チェックボックスのテスト。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest5 extends Applet implements ItemListener
{
Label m_Lbl; //状態の表示に使う。
public void init()
{
m_Lbl = new Label("チェックボックスのテスト。");
add(m_Lbl);
Checkbox Check = new Checkbox("テスト");
Check.addItemListener(this);
add(Check);
}
public void itemStateChanged(ItemEvent Ie)
{
Checkbox Check = (Checkbox)Ie.getItemSelectable();
m_Lbl.setText( Check.getLabel()+"の状態:"+Check.getState() );
}
}
|
Windowsで言うラジオボタンの使い方です。
CheckboxGroupというクラスを作成し、これをCheckboxのコンストラクタに渡すことで、ラジオボタンにすることができます。
☆ チェックボックスグループのテスト。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest6 extends Applet implements ItemListener
{
Label m_Lbl;
public void init()
{
m_Lbl = new Label("チェックボックスグループのテスト。");
add(m_Lbl);
CheckboxGroup CheckG = new CheckboxGroup();
Checkbox Check1 = new Checkbox("テスト1",CheckG,false);
Check1.addItemListener(this);
add(Check1);
Checkbox Check2 = new Checkbox("テスト2",CheckG,false);
Check2.addItemListener(this);
add(Check2);
Checkbox Check3 = new Checkbox("テスト3",CheckG,false);
Check3.addItemListener(this);
add(Check3);
}
public void itemStateChanged(ItemEvent Ie)
{
Checkbox Check = (Checkbox)Ie.getItemSelectable();
m_Lbl.setText(Check.getLabel()+"の状態:"+Check.getState());
}
}
|
Windowsで言うコンボボックスのことです。
☆ チョイスの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest7 extends Applet implements ItemListener
{
Label m_Lbl; //状態の表示に使う。
public void init()
{
//空白を付け足さないと、文字が最後まで表示されません。
m_Lbl = new Label("チョイスの使い方テスト。" +
" ");
add(m_Lbl);
Choice Ch = new Choice();
Ch.addItem("選択肢その1");
Ch.addItem("選択肢その2");
Ch.addItem("選択肢その3");
Ch.addItemListener(this);
add(Ch);
}
public void itemStateChanged(ItemEvent Ie)
{
Choice Ch = (Choice)Ie.getItemSelectable();
m_Lbl.setText(Ch.getSelectedItem()+"が選択されています。"+
"("+Ch.getSelectedIndex()+"番目"+")");
}
}
|
Windowsで言うエディットボックスです。ただし、単一行のコントロールと、複数行のコントロールは同一のものではなく、分かれています。一行だけなのが、テキストフィールド、複数行有るのがテキストエリアです。
☆ テキストフィールドとテキストエリア
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest8 extends Applet implements ActionListener,TextListener
{
Label m_Lbl;
TextArea m_Ta;
TextField m_Tf;
public void init()
{
m_Lbl = new Label("テキストフィールドとテキストエリアのテスト。"+
" ");
add(m_Lbl);
m_Ta = new TextArea(10,10);
m_Ta.addTextListener(this);
add(m_Ta);
m_Tf = new TextField(10);
m_Tf.addActionListener(this);
m_Tf.addTextListener(this);
add(m_Tf);
}
//ActionListenerの実装。
//TextFieldの中でエンターキーを押すとこのメソッドが反応します。
//TextAreaではエンターキーは改行になるので、キャッチできません。
public void actionPerformed(ActionEvent Ae)
{
if( Ae.getSource() == m_Tf )
{
m_Lbl.setText("TextFieldのActionEvent : "+Ae.getActionCommand());
}
}
//TextListenerの実装。
public void textValueChanged(TextEvent Te)
{
if( Te.getSource() == m_Ta )
{
m_Lbl.setText("(TextAreaのTextListener)TextAreaの内容:"+
m_Ta.getText());
}
if( Te.getSource() == m_Tf )
{
m_Lbl.setText("(TextFieldのTextListener)TextFiledの内容:"+
m_Tf.getText());
}
}
}
|
Windowsで言うリストボックスです。今回は、複数選択可能なリストボックスをテストしてみます(無論単一選択リストボックスも可能です。コンストラクタでtrueかfalseを設定するだけです)
マウスで選択した場合と、エンターキーを押した場合の挙動が異なります。
☆ リストの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest9 extends Applet implements ActionListener,ItemListener
{
Label m_Lbl;
List m_Lst;
public void init()
{
m_Lbl = new Label("リストボックスのテスト。"+
" ");
add(m_Lbl);
m_Lst = new List(10,true);
m_Lst.add("リストのテストその1");
m_Lst.add("リストのテストその2");
m_Lst.add("リストのテストその3");
m_Lst.add("リストのテストその4");
m_Lst.add("リストのテストその5");
m_Lst.addActionListener(this);
m_Lst.addItemListener(this);
add(m_Lst);
}
//ActionListenerの実装。
public void actionPerformed(ActionEvent Ae)
{
m_Lbl.setText("actionPerformed:"+Ae.getActionCommand());
}
//ItemLisntenerの実装。
public void itemStateChanged(ItemEvent Ie)
{
List Lst = (List)Ie.getItemSelectable();
if( Lst == m_Lst )
{
StringBuffer Str = new StringBuffer();
Str.append("選択されている項目のindex(itemStateChanged) : ");
int[] arr = m_Lst.getSelectedIndexes();
for( int i=0 ; i<arr.length ; i++ )
Str.append(arr[i]+",");
m_Lbl.setText(Str.toString());
}
}
}
|
スクロールバーの使い方です。ここで扱うのは、コントロールとして配置するタイプのスクロールバーです。
☆ スクロールバーの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest10 extends Applet implements AdjustmentListener
{
Label m_Lbl;
Scrollbar m_Sb;
public void init()
{
m_Lbl = new Label("スクロールバーのテストです。"+
" ");
add(m_Lbl);
//コンストラクタの引数:
//第一引数 : 水平(Scrollbar.HORIZONTAL)か
// 垂直(Scrollbar.VERTICAL)か
//第二引数 : 初期の位置。
//第三引数 : 幅
//第四引数 : 最小値
//第五引数 : 最大値
m_Sb = new Scrollbar(Scrollbar.HORIZONTAL,50,1,0,100);
m_Sb.addAdjustmentListener(this);
add(m_Sb);
}
public void adjustmentValueChanged(AdjustmentEvent Ae)
{
String Str = new String("N/A");
//スライダーを増加側に動かしたとき
if( Ae.getAdjustmentType() == AdjustmentEvent.BLOCK_INCREMENT )
Str= new String("slider up");
//スライダーを減少側に動かしたとき
if( Ae.getAdjustmentType() == AdjustmentEvent.BLOCK_DECREMENT )
Str= new String("slider down");
//スライダーをドラッグしたとき
if( Ae.getAdjustmentType() == AdjustmentEvent.TRACK )
Str= new String("slider tracking");
//スクロールバーの端にある△ボタンを押したとき。
if( Ae.getAdjustmentType() == AdjustmentEvent.UNIT_INCREMENT )
Str= new String("slider button up");
//スクロールバーの端にある▽ボタンを押したとき。
if( Ae.getAdjustmentType() == AdjustmentEvent.UNIT_DECREMENT )
Str= new String("slider button down");
Scrollbar Sb = (Scrollbar)Ae.getAdjustable();
m_Lbl.setText("current pos : "+Sb.getValue()+
" / action : "+Str);
}
}
|
レイアウトマネージャーを使わないと、addメソッドでコントロールを追加するたびに、単純に、横に並べられるだけでしたが、レイアウトマネージャーを使うと、好きな場所にコントロールを配置することができます(しかし、厳密に、座標で指定することはしていません)。
FlowLayoutは一つのコントロールにおいて、ほかのコントロールとの上下左右の間隔を指定することができます。また、コントロールを左・中央・右を基準に整列させたりできます。例では、中央を基準に整列させています。
☆ FlowLayoutの使い方。
import java.applet.*;
import java.awt.*;
public class AwtTest11 extends Applet
{
LayoutManager m_Lm;
public void init()
{
int h_span = 10;
int v_span = 10;
//レイアウトマネージャーを作成し、
//このレイアウトマネージャーを使用することを設定。
m_Lm = new FlowLayout(FlowLayout.CENTER,h_span,v_span);
setLayout(m_Lm);
//テスト用にボタンを配置してみる。
Integer[] NumArray = new Integer[1];
for( int c=0 ; c<75 ; c++ )
{
NumArray[0] = new Integer(c);
String Str = new String( "Button "+String.format("%03d",NumArray) );
add(new Button(Str));
}
}
}
|
ボーダーレイアウトの使い方です。東・西・南・北・真ん中、とちょっと変わった配置ができます。もちろん、五個コントロールを追加する必要が有るわけではありませんが、五個以下である必要が有るようです。
☆ BorderLayoutの使い方。
import java.applet.*;
import java.awt.*;
public class AwtTest12 extends Applet
{
BorderLayout m_Bl;
public void init()
{
m_Bl = new BorderLayout(10,10);
setLayout(m_Bl);
add(new Button("その1(上)"),"North");
add(new Button("その2(下)"),"South");
add(new Button("その3(左)"),"West");
add(new Button("その4(右)"),"East");
add(new Button("その5(真ん中)"),"Center");
}
}
|
グリッドレイアウトは、GridLayoutクラスのコンストラクタに何列、何行という引数を指定することで、表のような状態になり、そこにコントロールを入れていくレイアウトです。
またgetInsetsメソッドをオーバーライドすることで、ウインドウの枠とコントロールの上下左右の間隔を指定できます。
☆ GridLayout
import java.applet.*;
import java.awt.*;
public class AwtTest13 extends Applet
{
GridLayout m_Gl;
public void init()
{
m_Gl = new GridLayout(10,2,5,5);
setLayout(m_Gl);
for( int i =0 ; i < 20 ;i++ )
{
String Str = new String("ボタン"+i);
add(new Button(Str));
}
}
public Insets getInsets()
{
Insets Set = new Insets(50,50,50,50);
return Set;
}
}
|
パネルはレイアウトマネージャーにaddできます。またパネルにもボタンなどをaddできます。パネルにいくらかコントロールをまとめてaddし、それをレイアウトマネージャーにaddすることで、コントロールの配置にまとまりが出ます。
☆ Panelの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest14 extends Applet
{
GridLayout m_Layout;
Panel m_Pnl;
public void init()
{
m_Layout = new GridLayout(2,2,10,10);
//ウインドウのレイアウト設定。
setLayout(m_Layout);
int i;
m_Pnl = new Panel();
//パネル内のレイアウト設定。
m_Pnl.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
for( i=0 ; i<8 ; i++ )
m_Pnl.add(new Button("ボタン"+i));
add(m_Pnl); //パネルの追加。
add(new Button("ボタン"+i++));
add(new Button("ボタン"+i++));
add(new Button("ボタン"+i++));
}
}
|
windowクラスの子クラスがFrameというクラスです。Frameクラスを継承し、そのクラスのインスタンスを作成することで、WindowsAPIで言うCreateWindowで作成したようなウインドウが作成できます。
Frameクラスについては「 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Frame.html 」を参照。
JavaAppletを実行してみる。(今回はウインドウを作成するコードが有るため、ブラウザがそれに対して警告を行なう場合があります。)
☆ Frameの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest15 extends Applet
{
AwtTest15_Frame m_Frame;
public void init()
{
m_Frame = new AwtTest15_Frame("フレームだよん。");
m_Frame.setVisible(true); //ウインドウを表示する。
m_Frame.setSize(640,480); //ウインドウサイズの指定。
}
}
class AwtTest15_Frame extends Frame implements WindowListener
{
Label m_Lbl; //メッセージ表示用に使うラベル。
//以下は、WindowListenerインターフェイスの実装。
//ウインドウがアクティブになったときの処理。
public void windowActivated(WindowEvent We)
{
m_Lbl.setText("windowActivated");
}
//ウインドウが閉じられたときの処理。
public void windowClosed(WindowEvent We)
{
m_Lbl.setText("windowClosed");
}
//ウインドウを閉じるメッセージが来たときの処理。
public void windowClosing(WindowEvent We)
{
m_Lbl.setText("windowClosing");
dispose(); //ウインドウを消す。
}
//ウインドウがアクティブではなくなったときの処理。
public void windowDeactivated(WindowEvent We)
{
m_Lbl.setText("windowDeactivated");
}
//ウインドウが最小化されたときの処理。
public void windowDeiconified(WindowEvent We)
{
m_Lbl.setText("windowDeiconified");
}
//ウインドウが最小化状態から復帰したときの処理。
public void windowIconified(WindowEvent We)
{
m_Lbl.setText("windowIconified");
}
//ウインドウが作られたとき呼ばれる。
public void windowOpened(WindowEvent We)
{
m_Lbl.setText("windowOpened");
}
public AwtTest15_Frame(String WindowTitle)
{
super(WindowTitle); //ウインドウのタイトル設定。
addWindowListener(this);
m_Lbl = new Label("Frameのテスト。 ");
add(m_Lbl);
}
}
|
メニューバーの使い方です。
☆ メニューバーの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest16 extends Applet
{
AwtTest16_Frame m_Frame;
public void init()
{
m_Frame = new AwtTest16_Frame();
m_Frame.setSize(640,480);
m_Frame.setVisible(true);
}
}
class AwtTest16_Frame extends Frame implements ActionListener,ItemListener,WindowListener
{
Label m_Lbl;
MenuBar m_Menubar;
Menu m_Menu1,m_Menu2;
MenuItem m_Mi1,m_Mi2,m_Mi3;
CheckboxMenuItem m_MChk1,m_MChk2,m_MChk3;
public void actionPerformed(ActionEvent Ae)
{
if( Ae.getSource() == m_Mi1 )
m_Lbl.setText("メニュー1−1が押されました。");
if( Ae.getSource() == m_Mi2 )
m_Lbl.setText("メニュー1−2が押されました。");
if( Ae.getSource() == m_Mi3 )
m_Lbl.setText("メニュー1−3が押されました。");
}
public void itemStateChanged(ItemEvent Ie)
{
CheckboxMenuItem Check = (CheckboxMenuItem)Ie.getSource();
if( Check == m_MChk1 )
m_Lbl.setText("メニュー2−1が選択されました。");
if( Check == m_MChk2 )
m_Lbl.setText("メニュー2−2が選択されました。");
if( Check == m_MChk3 )
m_Lbl.setText("メニュー2−3が選択されました。");
/*
ちなみに、
チェックされているかされていないかは、
boolean Check.getState();
で調べる。
また、プログラム側からチェックした状態にしたい場合は
Check.setState(true);
とする。チェックして無い状態にするにはtrueをfalseにする。
*/
}
//ウインドウがアクティブになったときの処理。
public void windowActivated(WindowEvent We)
{
}
//ウインドウが閉じられたときの処理。
public void windowClosed(WindowEvent We)
{
}
//ウインドウを閉じるメッセージが来たときの処理。
public void windowClosing(WindowEvent We)
{
dispose(); //ウインドウを消す。
}
//ウインドウがアクティブではなくなったときの処理。
public void windowDeactivated(WindowEvent We)
{
}
//ウインドウが最小化されたときの処理。
public void windowDeiconified(WindowEvent We)
{
}
//ウインドウが最小化状態から復帰したときの処理。
public void windowIconified(WindowEvent We)
{
}
//ウインドウが作られたとき呼ばれる。
public void windowOpened(WindowEvent We)
{
}
AwtTest16_Frame()
{
super("メニューのテストです。");
addWindowListener(this);
m_Lbl = new Label("メニューのテスト。");
add(m_Lbl);
//メニューバーの作成。
m_Menubar = new MenuBar();
setMenuBar(m_Menubar);
//メニューの作成。
m_Menu1 = new Menu("メニュー項目その1");
m_Menubar.add(m_Menu1);
//メニューの中の項目を作成。
m_Mi1 = new MenuItem("メニュー1−1");
m_Menu1.add(m_Mi1);
m_Mi1.addActionListener(this);
m_Mi2 = new MenuItem("メニュー1−2");
m_Menu1.add(m_Mi2);
m_Mi2.addActionListener(this);
m_Mi3 = new MenuItem("メニュー1−3");
m_Menu1.add(m_Mi3);
m_Mi3.addActionListener(this);
//メニューの作成(チェックボックスタイプ)。
m_Menu2 = new Menu("メニュー項目その2");
m_Menubar.add(m_Menu2);
//メニューの中の項目を作成。
m_MChk1 = new CheckboxMenuItem("メニュー2−1");
m_Menu2.add(m_MChk1);
m_MChk1.addItemListener(this);
m_MChk2 = new CheckboxMenuItem("メニュー2−2");
m_Menu2.add(m_MChk2);
m_MChk2.addItemListener(this);
m_MChk3 = new CheckboxMenuItem("メニュー2−3");
m_Menu2.add(m_MChk3);
m_MChk3.addItemListener(this);
}
}
|
モードレス・モーダルダイアログがコンストラクタでの引数の指定で設定可能です。
☆ ダイアログの使い方。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AwtTest17 extends Applet
{
AwtTest17_Dialog m_Dlg;
public void init()
{
m_Dlg = new AwtTest17_Dialog(null);
}
}
class AwtTest17_Dialog extends Dialog
{
AwtTest17_Dialog(Frame Parent)
{
//親のコンストラクタの第三引数が
//true or falseでモードレスがモーダルになる。
//trueだとモーダル、falseだとモードレスになる。
super(Parent,"モードレスダイアログのテストです。",false);
//WindowListenerを設定する。
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent We)
{
dispose();
}
});
//テストのため、ダイアログにコントロールを配置してみる。
setLayout(new GridLayout(5,5,10,10));
for( int i=0 ; i<25 ; i++ )
{
add(new Button("ボタン"+i));
}
setVisible(true);
setSize(640,480);
}
//getInsetsメソッドをオーバーライドすることで
//コントロールを配置する場所のspanを設定。
public Insets getInsets()
{
return new Insets(50,20,20,20);
}
}
|
WindowsAPIで言う、GetOpenFileName・GetSaveFileName関数みたいなやつです。
☆ ファイルダイアログのテスト。
import java.applet.*;
import java.awt.*;
public class AwtTest18 extends Applet
{
Label m_Lbl;
public void init()
{
m_Lbl = new Label("ファイル名前の取得ダイアログのテスト。");
add(m_Lbl);
//FileDialog.LOADかFileDialog.SAVEの指定で、
//ダイアログのメッセージが、保存用or読み出し用かで変化します。
FileDialog Fd = new FileDialog((Frame)null,
"ファイル名前の取得ダイアログ",FileDialog.LOAD);
//モーダルダイアログの表示。
//ファイルのパスを取得したら制御が帰ってくる。
Fd.setVisible(true);
//取得したファイルパスを表示する。
m_Lbl.setText("取得したパス: "+
Fd.getDirectory()+Fd.getFile());
}
}
|