【仕様】
【成果物】
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;
}
}