アプレットでいろいろな図形を描いてみましょう。
これは次のように書きました。
import java.awt.*;
import javax.swing.*;
public class Applet2 extends JApplet {
// サンセリフの30ポイントのフォントを ss30 と名づける
Font ss30 = new Font("SansSerif", Font.PLAIN, 30);
// アプレットの初期化
public void init() {
MyPanel p = new MyPanel();
p.setBackground(Color.white); // 背景色を白に
setContentPane(p);
}
// 実際の描画
class MyPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue); // 色を青に
g.drawLine(10, 30, 40, 10); // 線分
g.drawRect(50, 10, 30, 20); // 長方形
g.fillRect(90, 10, 30, 20); // 長方形(塗りつぶし)
g.drawOval(130, 10, 30, 20); // 楕円
g.fillOval(170, 10, 30, 20); // 楕円(塗りつぶし)
g.setColor(Color.red); // 色を赤に
g.setFont(ss30);
g.drawString("ジャバJava!", 10, 90);
}
}
}
個々の描画メソッドをもうちょっと詳しく説明します。
Color.white のような名前を使う方法と
new Color(r, g, b) のような RGB
成分を0〜255の整数で指定する方法などがありますもう一つサンプルとして,ボタンを押すたびにランダムな数を画面に出す アプレットを作ってみましょう。
これは次のように書きました。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Y extends JApplet {
int x = 1; // 整数の変数 x を作る
Font ss30 = new Font("SansSerif", Font.PLAIN, 30); // フォント定義
public void init() {
Container c = getContentPane();
JButton b = new JButton("押してね!"); // ボタンを作る
MyPanel p = new MyPanel(); // パネルを作る
c.add(b, BorderLayout.NORTH); // ボタンを貼り付ける
c.add(p, BorderLayout.CENTER); // パネルを貼り付ける
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { // イベント処理
x = (int)(10 * Math.random()) + 1; // x に1〜10の乱数を入れる
repaint(); // 再描画
}
});
}
class MyPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(ss30);
g.drawString(x + "", 140, 40); // x を座標 (140,40) に書く
}
}
}
整数 x はそのままでは drawString() に渡せないので,
文字列に化けさせるテクニック x + "" を使っています。
次に,GIF ファイルを読み込んでみましょう。 これは松阪大学(現:三重中京大学)の1997年度前期コンピュータ演習受講者の落合朋子さんの作品です(Swing版に直しました)。 マウスをクリックしてください。ミノムシが増殖します(はずなのですが,環境によってうまくいきません)。
これは次のように書かれています。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Minomushi extends JApplet {
Image image;
int x = 70, y = 30;
public void init() {
MyPanel p = new MyPanel();
p.setBackground(Color.white);
setContentPane(p);
p.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
});
image = getImage(getDocumentBase(), "musi.gif");
}
class MyPanel extends JPanel {
protected void paintComponent(Graphics g) {
g.drawImage(image, x, y, this);
}
}
}
まず Image 型の変数 image を作っておき,それに getImage()
メソッドで画像を読み込みます。
getImage() の使い方は,通常
image = getImage(getDocumentBase(), "ファイル名");
の形で使います。この getDocumentBase()
は,その HTML ファイルのあるディレクトリと同じ場所に画像ファイルがあることを示すことばです。
ここでは musi.gif という GIF ファイルを使っています。
paintComponent() メソッドで実際に絵を描きます。
絵を描く命令は g.drawImage(image, x, y, this) です。
これは,変数 image に入っている画像を,点 (x, y) を左上隅として描きます。
最後の this は,このコンポーネントに対して描くという意味の決まり文句です。
さらにマウスをクリックするとその場所にミノムシが増殖するように,paintComponent
で super.paintComponent を呼び出さないようにしたり,p.setOpaque(false);
したりしてみているのですが,環境によってはうまくいかないようです。
Last modified: 2006-01-03 11:13:15