Har*_*dhu 4 java swing image jpanel mouseevent
场景:我有一个JFrame并JPanel添加到其中JFrame.在这个面板上,我使用了以下三个图像:
public void paint(graphics g) {
g.drawImage(img1,100,100,null);
g.drawImage(img2,200,200,null);
g.drawImage(img3,300,300,null);
}
Run Code Online (Sandbox Code Playgroud)
我已经实现MouseListener了监听点击的界面.现在,我希望每当我点击任何这些图像时,我的输出(在命令提示符下使用System.out.println();)应该是我点击的图像对象?
请解释一下我有可能,怎么样?
好吧,首先你要在(0,0)绘制所有图像,你确定要这样做吗?如果这样做,则可能单击属于所有图像的点(es,0,0).
顺便说一句,在MouseListener中你有这个方法:
public void mouseClicked(MouseEvent e)
{
Point point = e.getPoint();
}
Run Code Online (Sandbox Code Playgroud)
点存储您的点击相对于您正在收听的组件的坐标.所以你要做的只是检查你点击的点是否在图像区域内.您可以执行以下操作:
Rectangle imageBounds = new Rectangle(x,y,image_width, image_height);
if (imageBounds.contains(point)){
//point is inside given image
}
Run Code Online (Sandbox Code Playgroud)
其中x,y是使用drawImage方法绘制图像的坐标(在您的情况下为0,0)和image_width,image_height是图像的维度.
编辑:
有一个替代我上面解释的解决方案.像Hovercraft Full Of Eels建议您可以执行以下操作:
这种方法有很大的好处:您不必担心鼠标坐标,因为每个JLabel都有相对的鼠标监听器.您应该考虑的唯一一件事是:
使用Component而不是绘制图像,你将无法绝对使用它们,但你必须使用适当的LayoutManager来布局你的JLabel.