矩形出现在它应该的位置

时间:2013-12-13 20:10:41

标签: java swing

我正在尝试编写一个Java应用程序,我可以在其中绘制图像上的矩形(JLabel)。问题是矩形看起来不应该在哪里。它从屏幕的左上角开始,而不是带有图像的组件..

我得到起点的x和y坐标,如下所示:

public void mouseClicked(MouseEvent e) {
    System.out.println("X:"+e.getX()+"Y:"+e.getY());
}

当拖动鼠标时,我得到结束x,y并调用重绘:

public void mouseDragged(MouseEvent e) {
        if(e.getSource().equals(label)) {
            System.out.println("X:"+e.getX()+"Y:"+e.getY());
            endX = e.getX();
            endY = e.getY();
            repaint();
        }
    }

那么如何让它相对于标签获得X和Y?而不是窗户?我希望0,0成为标签的开头。

将鼠标侦听器添加到标签:

label.addMouseListener(this);
label.addMouseMotionListener(this);

将标签添加到面板以进行布局操作。

更新:我尝试打印出坐标。它们似乎没问题。但矩形仍然不是我想要的。我怀疑它是在JFrame上绘制的。 如何在标签上画一些东西?

SOLDVED:问题是我从未预料到的。我只是从我的标签上得到了一个图形对象并随之绘制。

2 个答案:

答案 0 :(得分:4)

  

那么如何让它相对于标签获得X和Y?而不是窗户?

我觉得你正在将MouseListener添加到窗口中。

将MouseListener添加到标签中,鼠标点将相对于标签。

编辑:

  

如何在标签上绘画?

覆盖JLabel的paintComponent()方法。

您还可以查看Custom Painting Approaches以获取在JPanel上绘制矩形的示例。 JLabel的代码是相同的。 DrawOnComponent示例将是要查看的代码。

如果您仍有问题,请发布您的SSCCE并退出让人们猜测您在做什么。

答案 1 :(得分:0)

您需要考虑图形的宽度和高度

endX = e.getX() + (figureWidth / 2);
endY = e.getY() + (figureHeight / 2);