- フレームクラス
アプリケーションでウインドウを作成するには、Frameクラスを拡張したクラスを作成します。次の例では、newFrameクラスを定義しています。コンストラクタで
setSize(200, 150); でフレームのサイズを定めています。
mainでは、newFrame() のインスタンス nf を作成し、nf.show() で可視(実際に表示)にしています。
public class gFrame extends Frame {
public static void main(String[] args) {
newFrame nf = new newFrame();
nf.show();
}
}
class newFrame extends Frame {
newFrame() {
setSize(200, 150);
}
}
}
これを実行すると、次のようなウインドウが出現します。
- イベント処理
ただし、このままでは、イベントに対応していませんから、ウインドウを閉じることが出来ません。ウインドウを閉じるには、メニューバーにある xボタン に対応するイベント処理が必要です。
このイベント処理に対応した、newFrame を以下に紹介します。ウインドウのクローズ処理は、WindowAdapterクラスの、windowClosing()が処理をします。ここでは、System.exit(0);
で終了処理をします。このクラスのインスタンスを、addWindowListener() で、newFrame クラスに追加し、イベント処理を行います。ここでの、処理は「無名インナクラス」と呼ばれます。
これで、タイトルバーによるウインドウのクローズ処理が可能になります。
class newFrame extends Frame {
newFrame() {
setSize(200, 150);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0); //終了イベント
}
});
}
public void paint(Graphics g) {
g.drawString("Hello", 30, 100); //グラフィック表示
}
}
- グラフィック処理
上記のnewFrameクラスに、以下のメソッドを追記すると、ウインドウにグラフィックスを描画することができます。g.drawString("Hello",
30, 100); は文字列 "Hello" を (30,100) の座標から表示します。
g.drawLine(0,0,200,150); は (0,0)から(200,150)まで、直線を描画するメソッドです。座業(0,0)はウインドウの左上の角の座標で、ここからタイトルバーも表示されています。
public void paint(Graphics g) {
g.drawString("Hello", 30, 100); //グラフィック表示
g.drawLine(0,0,200,150);
}
- マウス位置の取得と円の表示
先の例をマウス位置による対話的な描画を行う、簡単な例を紹介します。main() は同じです。Frameを継承した mFrame で、マウスのイベント処理を行うマウスリスナを組み込みます。addMouseListener()
では、マウスボタンを押したとき実行される、this_mousePressed(e); メソッドを定義しています。
this_mousePressed(MouseEvent e)は、マウスボタンが押されると呼び出されるメソッドで、引数e にマウスイベントの情報が記録されています。e.getPoint()
でマウスの位置を mpos に取得します。mpos は Point クラスのインスタンスで、mpos.x でmpos のx座標を取り出すことができます。このメソッドの最後に、repaint()
メソッドを呼び出しています。これは、ウインドウを再描画することを指示します。
repaint() により、paint() が間接的に実行されます。これは、g.drawOval() を呼び出し、マウスの位置を中心に、直径20の円を表示します。
g.drawOval(x,y, 20, 20);
import java.awt.*;
import java.awt.event.*;
public class MouseFrame {
public static void main(String[] args) {
mFrame nf = new mFrame();
nf.show();
}
}
class mFrame extends Frame {
Point mpos = new Point(0, 0);
mFrame() {
setSize(200, 150);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0); //終了イベント
}
});
//マウスリスナの定義
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
this_mousePressed(e);
}
});
}
public void paint(Graphics g) {
g.drawOval(mpos.x - 10, mpos.y - 10, 20, 20);
//System.out.println(mpos);
}
void this_mousePressed(MouseEvent e) {
mpos = e.getPoint();
repaint();
}
}
- GUI部品
グラフィックスに機能と、イベント処理機構を利用すると、GUIを行う各種の「部品」を制作できます。マウスでクリックすると対応する処理を行うボタンや、編集出来る文字枠、等です。
これらの部品については、別の項目で紹介します。