Javaアップレットについて質問です。マウスをドラッグすると、マウスによって指定した位置に長方形を描き、Shiftキーを押したまま描かれた長方形の内部でドラッグすると、マウスを移動した距離だけ長方形を移動させる、というプログラムを作りたいのですが Shiftキーを押したまま長方形の内部でドラッグすると、描いた長方形が消えてしまいます。 どうしていいかわからないので、改善点がありましたら教えてください。 なお、最初に長方形を描くところはできています。 プログラムは以下のとおり import java.awt.*; import java.applet.*; import java.awt.event.*; public class ex1123 extends Applet implements MouseListener, MouseMotionListener{ //Shiftキーを押しているかどうか boolean isS = false; //マウスが長方形の内部に入っているかどうか boolean enter = false; //長方形 Rectangle r1 = new Rectangle(0,0,0,0); //Shiftキーを押したまま、マウスを押した位置と離した位置 Point p1; Point p2; public void init(){ addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g){ if(!r1.isEmpty()){ if(isS){ //マウスが長方形の内部にはいっていたら移動させる if(enter){ //長方形の始点を移動させる r1.x = r1.x + (p2.x - p1.x); r1.y = r1.y + (p2.y - p1.y); g.drawRect(r1.x, r1.y, r1.width, r1.height); } } else{ g.drawRect(r1.x, r1.y, r1.width, r1.height); } } } public void mousePressed(MouseEvent e){ r1.setLocation(e.getPoint()); r1.setSize(0,0); if((e.getModifiersEx() & MouseEvent.SHIFT_DOWN_MASK) == MouseEvent.SHIFT_DOWN_MASK){ isS = true; //マウスが長方形の内部に入っているかどうか enter = r1.contains(e.getPoint()); if(enter){ //p1はマウスを押した位置, p2はnull p1 = e.getPoint(); p2 = null; } } else{ isS = false; } repaint(); } public void mouseDragged(MouseEvent e){ //マウスの位置 1if(enter) p2 = e.getPoint(); //最初に描く長方形のサイズを決める r1.setSize(Math.abs(e.getX() - r1.x), Math.abs(e.getY() - r1.y)); repaint(); } public void mouseReleased(MouseEvent e){ //マウスを離す位置を指定 if(enter) p2 = e.getPoint(); //最初に描く長方形のサイズを決める r1.setSize(Math.abs(e.getX() - r1.x), Math.abs(e.getY() - r1.y)); repaint(); } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} }
↧