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(); } } }