我正在尝试编写一个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:问题是我从未预料到的。我只是从我的标签上得到了一个图形对象并随之绘制。
答案 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);