310044B 大原隼一 イメージを読み込んだ画像に雪を書き込むプログラム。 GUI部品を使って雪を消すことができる。
//大原 隼一 310044B
/*雪だるまと月の画像のイメージファイル(test.png)をファイルから読み込んで、その画像に雪を書き加える。さらに、GUI部品を使っての指示により線分を消去することができる。メニューバーのEXITメニューを選択するとプログラムを終了する。*/
//
// アプレットを使うため
import java.applet.*;
// AWT を使うので,java.awt.* を import する.
import java.awt.*;
// イベント処理をおこなうので,
import java.awt.event.*;
// イメージを使うので
import java.awt.image.*;
// Vectorクラスを用いるため
import java.util.*;
// 雪の座標クラスを定義する.
class Snow{
// 始点,終点のX座標,Y座標を int で保持する.
public int snow_x,snow_y;
// Snowのコンストラクタ
public Snow(int x1,int y1){
snow_x=x1;
snow_y=y1;
}
}
// Canvasクラスのサブクラスとしてお絵書き領域を作る
class SCanvas extends Canvas implements KeyListener{
// Snowの配列を保持するVectorクラスの変数 snowArrayの宣言
Vector snowArray;
boolean dragging;
Color snowColor;
Image image;
public SCanvas(Image filename){
super();
image=filename;
snowArray=new Vector();
dragging=false;
// 雪の色は白に
snowColor=Color.white;
setSize(400,400);
addKeyListener(this);
//マウスボタンがClickされた時のマウスカーソルの位置を得る
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
int mx=e.getX(),my=e.getY();
System.out.println("mouseClicked("+e+","+mx+","+my+")");
snowArray.addElement(new Snow(mx,my));
repaint();
}
}
);
}
//qを押すと終了
public void keyPressed(KeyEvent e){
// イベントからキーのコードを取り出す
int key=e.getKeyChar();
// デバッグ用の表示
System.out.println("keyPressed("+e+","+key+")");
// 入力が 'q'の時は終了する
if(key=='q') System.exit(0);
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
// Deleteボタンが押されたら一つ雪を消す
public void deleteSnow(){
int size;
if((size=snowArray.size())>0){
snowArray.removeElementAt(size-1);
repaint();
}
}
// Clear ボタンが押されたら雪をすべて消す
public void clearsnow(){
snowArray.removeAllElements();
repaint();
}
//次の画面のイメージを作る
public void update(Graphics g){
paint(g);
}
//初めにイメージを表示し、得られた座標にしたがって雪を描く
public void paint(Graphics g){
g.drawImage(image,0,0,this);
int i;
g.setColor(snowColor);
int size=snowArray.size();
if(dragging) size--;
for(i=0;i< size;i++){
Snow l=(Snow)snowArray.elementAt(i);
g.fillOval(l.snow_x,l.snow_y,10,10);
}
}
}
//アプレットクラスのサブクラスとして Kadai1216を定義
public class Kadai1216 extends Applet implements ActionListener{
SCanvas sCanvas;
Button deleteButton,clearButton;
Image image;
//アプレット作成時に initが呼ばれる
public void init(){
String filename=getParameter("image");
//GUI部品の作成
Panel panel=new Panel();
panel.setLayout(new FlowLayout());
panel.add(deleteButton=new Button("Delete"));
deleteButton.addActionListener(this);
panel.add(clearButton=new Button("Clear"));
clearButton.addActionListener(this);
setLayout(new BorderLayout());
add(panel,"North");
Image test=getImage(getCodeBase(), filename);
add(sCanvas=new SCanvas(test),"South");
setSize(getPreferredSize());
setVisible(true);
Kadai1216 frame=new Kadai1216();
}
//ActionListenerを実装するためのメソッド
public void actionPerformed(ActionEvent e){
System.out.println(e);
Object source=e.getSource();
if(source.equals(deleteButton)){
sCanvas.deleteSnow();
}
// Clearボタンが押された時
else if(source.equals(clearButton)){
sCanvas.clearsnow();
}
}
}
