2012-05-24 4 views
1

을 드래그 이벤트를 드래그 한 다음 방법 마우스 그 원을 이동?만들기 원하고 마우스 원을 이동 자바에서 이벤트를 끌고 마우스 원을 그리는 방법을 이벤트

내 코드는 다음과 같습니다. 그 라인을 따라

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

class r extends JPanel { 

    public int x1, x2, y1, y2, r, w, h,xDist,yDist; 
    public static boolean flag = false, pressFlag = false; 

    public r() { 
     setBackground(Color.WHITE); 
     addMouseListener(new MouseAdapter() { 

      public void mousePressed(MouseEvent m) { 
//    pressFlag = true; 
       if (r > (int) Math.sqrt(Math.abs(m.getX() - x1) * Math.abs(m.getX() - x1) + Math.abs(m.getY() - y1) * Math.abs(m.getY() - y1))) { 
        flag = true; 
        yDist=xDist=x2 = y2 = 0; 
       } else { 
        x1 = y1 = 0; 
        r=x2 = y2 = 0; 
        x1 = m.getX(); 
        y1 = m.getY(); 
       } 
       repaint(); 
      } 

      public void mouseReleased(MouseEvent m) { 
       w = x2 - x1; 
       h = y2 - y1; 
       r = (int) Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); 
       flag = false; 
      } 
     }); 
     addMouseMotionListener(new MouseMotionAdapter() { 

      public void mouseDragged(MouseEvent m) { 
       if (flag && (x2!=0 && y2!=0)) { 
        xDist=(m.getX()-x2); 
        yDist=(m.getY()-y2); 
       } 
       x2 = m.getX(); 
       y2 = m.getY(); 

       repaint(); 
      } 
     }); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (flag) { 
      x1=x1+xDist; 
      y1=y1+yDist; 
      g.drawOval(x1, y1, w, h); 
     } else { 
      g.drawOval(x1, y1, x2 - x1, y2 - y1); 
     } 

    } 
} 

public class q extends JFrame { 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     jFrame.setSize(300, 300); 
     jFrame.add(new r()); 
     jFrame.setVisible(true); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+3

끔찍한 명명 규칙! – adarshr

+0

나중에,하지만 난 그냥 코드를 so.in 내 코드를 수정 먼저 원을 그려 마우스 드래그 이벤트에서 그 원을 이동합니다. 하지만 커서에서 정확히 움직이지 않을거야. 내가 뭘해야하니? – Jay

+0

작동하지 않는 기능은 무엇입니까? 방금 코드를 시험해 보았습니다. –

답변

3

뭔가 나를 위해 잘 작동 :이

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.geom.Ellipse2D; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

class DragCircle extends JPanel { 

    private final class MouseDrag extends MouseAdapter { 
     private boolean dragging = false; 
     private Point last; 

     @Override 
     public void mousePressed(MouseEvent m) { 
      last = m.getPoint(); 
      dragging = isInsideEllipse(last); 
      if (!dragging) { 
       x = last.x; 
       y = last.y; 
       width = 0; 
       height = 0; 
      } 
      repaint(); 
     } 

     @Override 
     public void mouseReleased(MouseEvent m) { 
      last = null; 
      dragging = false; 
      repaint(); 
     } 

     @Override 
     public void mouseDragged(MouseEvent m) { 
      int dx = m.getX() - last.x; 
      int dy = m.getY() - last.y; 
      if (dragging) { 
       x += dx; 
       y += dy; 
      } else { 
       width += dx; 
       height += dy; 
      } 
      last = m.getPoint(); 
      repaint(); 
     } 
    } 

    private int x; 
    private int y; 
    private int width; 
    private int height; 

    private MouseDrag mouseDrag; 

    public DragCircle() { 
     setBackground(Color.WHITE); 
     mouseDrag = new MouseDrag(); 
     addMouseListener(mouseDrag); 
     addMouseMotionListener(mouseDrag); 
    } 

    public boolean isInsideEllipse(Point point) { 
     return new Ellipse2D.Float(x, y, width, height).contains(point); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawOval(x, y, width, height); 
    } 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     jFrame.setSize(300, 300); 
     jFrame.add(new DragCircle()); 
     jFrame.setVisible(true); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+0

나에게 도움을 주셔서 감사합니다.이 코드는 잘 작동합니다. – Jay

+0

@ 제이 계산에 문제가 있다고 생각합니다. –

+0

, 네, 맞아요. 나는 그 실수를 풀 것이다. 다시 나에게 도움을 주셔서 감사합니다. – Jay