首先,这是我的第一个问题,它被标记为重复(而不是):https://stackoverflow.com/questions/43167650/setting-ovals-center-as-mouse-coordinates
我花了最后9-10个小时来解决它。
我不会复制整个问题(我已经分享了链接),但我会告诉你更多细节。
我的窗口是512x512。 当我点击窗口的左上角时,x轴约为1-2,y轴约为30-35。因此,检查窗口的低侧,y轴约为510,这是正常的。
这就是我所做的:
public class Quadtree implements MouseListener{
int x=256,y=256;
JFrame frame=new JFrame();
JPanel thePanel = new JPanel(){
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
drawCenteredCircle((Graphics2D) g,x,y,30);
}
};
public void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
x = x-(r/2);
y = y-(r/2);
g.fillOval(x,y,r,r);
}
public static void main(String[] args) {
new Quadtree();
}
public void mouseClicked(MouseEvent e) {
// Point p=e.getPoint();
x=e.getX();
System.out.println(x);
y=e.getY();
System.out.println(y);
thePanel.repaint();
}
public Quadtree(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(thePanel);
frame.setLocationRelativeTo(null);
frame.setSize(512,512);
frame.addMouseListener(this);
frame.setVisible(true);
frame.setResizable(false);
frame.setTitle("Quadtree");
}
}
但不知何故,在下面的代码中,我将椭圆的y轴设置为0,但它工作正常。
public void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
x = x-(r/2);
y = y-(r/2);
g.fillOval(x,0,r,r);
}
输出是:
但是当我点击鼠标(在第一个示例中说明)时,鼠标下方会出现圆圈。
有什么想法来解决它吗?
答案 0 :(得分:1)
Y轴从' 32'在主窗口
frame.addMouseListener(this);
框架有标题栏和边框。不要将MouseListener添加到框架中。
而是将MouseListener添加到面板中。然后鼠标点将相对于面板,而不是框架。