나는 사용자가 마우스를 클릭 할 때마다 창에 3 * 3 사각형을 출력하는 다음과 같은 간단한 자바 스윙 프로그램을 만들었습니다. 사용자가 두 번 이상 클릭하더라도 사각형은 창에 남아 있습니다. 그러나 프로그램이 컴파일되고 실행되면 마우스 포인터가있는 곳의 바로 아래에 사각형이 그려집니다. 나는 잠시 동안이 두뇌 위에 내 머리를 꽉 찼다. 각 클릭에 대해 포인터로 정확하게 사각형이 나타나게하려면 어떻게해야합니까? 어떤 도움을 많이 주셔서 감사합니다!자바 스윙의 마우스 포인터 문제
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class ClickCloud extends JComponent {
final ArrayList<Point2D> points = new ArrayList<Point2D>();
public void addPoint(Point2D a) {
points.add(a);
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for (int i = 0; i < points.size(); i++) {
Point2D aPoint = points.get(i);
g2.draw(new Rectangle2D.Double(aPoint.getX(), aPoint.getY(), 3, 3));
}
}
public static void main(String[] args) {
final ClickCloud cloud = new ClickCloud();
JFrame aFrame = new JFrame();
class ClickListen implements MouseListener {
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
cloud.addPoint(arg0.getPoint());
cloud.repaint();
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aFrame.setSize(500, 500);
aFrame.add(cloud);
aFrame.addMouseListener(new ClickListen());
aFrame.setVisible(true);
}
}
고맙지 만, 나는 그 질문을하는 사람입니다! LOL 당신은 큰 도움이되었습니다, 대단히 감사합니다! 빠르고 우수한 솔루션. – astroDude1
@ astroDude1 대답을 수락 한 것으로 표시하십시오. 감사 – tanyehzheng