Y轴在主窗口中从'32'开始

时间:2017-04-02 18:02:50

标签: java swing

首先,这是我的第一个问题,它被标记为重复(而不是):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);
    }

输出是:

enter image description here

但是当我点击鼠标(在第一个示例中说明)时,鼠标下方会出现圆圈。

有什么想法来解决它吗?

1 个答案:

答案 0 :(得分:1)

  

Y轴从' 32'在主窗口

frame.addMouseListener(this);  

框架有标题栏和边框。不要将MouseListener添加到框架中。

而是将MouseListener添加到面板中。然后鼠标点将相对于面板,而不是框架。