【仕様】

【成果物】

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class DrawApplet extends Applet implements MouseListener, MouseMotionListener, KeyListener{
	//スタート描画ポジション
	int nStartDot_x, nStartDot_y;
	//終了描画ポジション
	int nEndDot_x, nEndDot_y;
	//キー入力コード格納変数(現在Shiftキーのみ)
	int nKeyCode;
	//前回までの描画データを保持
	//サイズ変更のための対応
	Vector shapes = new Vector();
	public void init(){
	    addMouseListener(this);
	    addMouseMotionListener(this);
	    addKeyListener(this);
		
	    nKeyCode = -1;
		nStartDot_x=-1;
		nStartDot_y=-1;
		nEndDot_x=-1;
		nEndDot_y=-1;
	}
	
	public void paint(Graphics g){

		int nSize = shapes.size();
		//蓄えた描画データを再描画
		for(int i=0; i<nSize; i++)
		{
			Rectangle data = (Rectangle)shapes.elementAt(i);
			g.drawLine(data.x, data.y, data.width, data.height);
		}
		//シフトキー入力中は直線を描画
		if(nKeyCode == KeyEvent.VK_SHIFT)
		{
			g.drawLine(nStartDot_x,nStartDot_y,nEndDot_x,nEndDot_y);
		}
		
	}
	
	//マウスリスナー
	public void mouseClicked(MouseEvent ev){
		
	}
	
	public void mouseEntered(MouseEvent ev){
		
	}
	
	public void mouseExited(MouseEvent ev){
		
	}

	public void mousePressed(MouseEvent ev){
		nStartDot_x=ev.getX();
		nStartDot_y=ev.getY();
		nEndDot_x=ev.getX();
		nEndDot_y=ev.getY();
		//現在のポジションを配列に格納
		shapes.addElement(new Rectangle(nStartDot_x,nStartDot_y,nEndDot_x,nEndDot_y));
		//描画
	    paint(getGraphics());
	}

	public void mouseReleased(MouseEvent ev){
		//マウス操作終了のため現在のポジションを配列に追加
		shapes.addElement(new Rectangle(nStartDot_x,nStartDot_y,nEndDot_x,nEndDot_y));
	}
	
	public void mouseDragged(MouseEvent ev){
		//シフトキー入力かどうか
		if(nKeyCode == KeyEvent.VK_SHIFT)
		{
			//シフトキー入力中は直線を描画するため、終了ポジションのみ更新
			nEndDot_x=ev.getX();
			nEndDot_y=ev.getY();
			//再描画
			//repaintで画面がちらつく。抑える方法を捜索中。
			repaint();
		}
		else
		{
			//シフトキー入力でなければ自由に線を描画させる
			nStartDot_x=ev.getX();
			nStartDot_y=ev.getY();
			nEndDot_x=ev.getX();
			nEndDot_y=ev.getY();
			shapes.addElement(new Rectangle(nStartDot_x,nStartDot_y,nEndDot_x,nEndDot_y));
			paint(getGraphics());
		}

	}

	public void mouseMoved(MouseEvent ev){

	}
	
	public void keyPressed(KeyEvent ev){
		//入力キーを取得
		nKeyCode = ev.getKeyCode();
	}
	
	public void keyTyped(KeyEvent ev){
		
	}
	
	public void keyReleased(KeyEvent ev){
		//シフトキー入力終了のため現在のポジションを配列に追加
		shapes.addElement(new Rectangle(nStartDot_x,nStartDot_y,nEndDot_x,nEndDot_y));
		nKeyCode = -1;
	}
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS