gpt4 book ai didi

java - Java Swing中的鼠标指针问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:06 27 4
gpt4 key购买 nike

我创建了以下简单的 Java Swing 程序,每次用户单击鼠标时,它都会在窗口中输出一个 3*3 的正方形。即使用户点击多次,方 block 仍保留在窗口中。该程序编译并运行得很好,但是,当在窗口中单击时,正方形绘制在远低于鼠标指针的位置。我已经为这个问题绞尽脑汁了一段时间——我可以在这里改变什么来让方 block 在每次点击时与指针完全一致?非常感谢您的帮助!

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);
}
}

最佳答案

您正在将 MouseListener 添加到 JFrame,但在 JComponent 中并相对于 JComponent 显示结果。因此,单击点的位置将相对于 JFrame 的坐标,但随后会相对于 JComponent 的坐标显示,这会将内容向下移动标题栏的距离。而是简单地将 MouseListener 添加到负责显示结果的同一组件,以便显示和点击坐标匹配:

  aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aFrame.setSize(500, 500);
aFrame.add(cloud);
//!! aFrame.addMouseListener(new ClickListen()); // !! Removed
cloud.addMouseListener(new ClickListen()); // !! added
aFrame.setVisible(true);

顺便说一句:感谢您创建和发布一个像样的 SSCCE因为这样可以更轻松地分析和解决您的问题。

关于java - Java Swing中的鼠标指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com