원을 화면에 표시하려고 할 때 사용자가 원 안쪽을 클릭하면 마우스가 눌러지는 동안 원이 드래그되는 기능이 활성화됩니다.JFrame의 원을 끌기
이것은 내가 지금까지 가지고있는 코드입니다. 드래그가 작동하지만, 화면의 아무 곳이나 누르면 서클 내부를 누르지 않고 드래그 할 수 있습니다. 내가
여기 내가 가지고있는 코드가 너무 복잡하지 않다 희망
는, 사람이 바로 나에게 수정해야하는 코드를 말할 수하십시오, 그것은 더 이상 시간을 저를 저장합니다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DragCircle extends JFrame {
private static final long serialVersionUID = 1L;
public static int size = 400;
public static int r = 10;
private int x;
private int y;
private int cX;
private int cY;
private int dX;
private int dY;
private MouseHandler mh;
boolean isCircleClicked = false;
public static void main(String[] args) {
DragCircle c1 = new DragCircle();
c1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public DragCircle() {
super("Drag circle");
cX = r + 100;
cY = r + 100;
mh = new MouseHandler();
addMouseListener(mh);
addMouseMotionListener(mh);
setSize(size, size);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fillOval(cX, cY, r * 2, r * 2);
}
private class MouseHandler extends MouseAdapter implements
MouseMotionListener {
public void mousePressed(MouseEvent me)
{
if ((cX - me.getX()) * (cX - me.getX()) + (cY - me.getY())
* (cY - me.getY()) < r * r) {
isCircleClicked = true;
}
}
public void mouseDragged(MouseEvent me) {
if (isCircleClicked) {
x = me.getX() - dX;
y = me.getY() - dY;
cX = x + r;
cY = y + r;
repaint();
}
}
public void mouseReleased(MouseEvent e) {
isCircleClicked = false;
}
}
}
당신은 mouseReleased에 대해 옳았습니다. 나는 그것을 넣을 것이고, 이렇게 컴파일했습니다. – Madison