4
我创建了以下简单的Java Swing程序,每次用户单击鼠标时都会在窗口中输出3 * 3的方块。即使用户多次点击,广场仍保留在窗口中。该程序编译并运行得很好,但是,当在窗口中单击时,正方形画出的位置远低于鼠标指针的位置。一段时间以来,我一直在绞尽脑汁地思考这个问题 - 我可以在这里改变什么来让广场与每次点击时的指针完全一致?非常感谢您的帮助!Java Swing中的鼠标指针问题
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);
}
}
不要感谢我,我是问问题的人!大声笑你是一个很大的帮助,非常感谢!快速而优秀的解决方案。 – astroDude1 2011-03-02 05:59:49
@ astroDude1请将答案标记为已接受。谢谢 – tanyehzheng 2011-03-02 06:13:34