Java找到我点击的图像?

Har*_*dhu 4 java swing image jpanel mouseevent

场景:我有一个JFrameJPanel添加到其中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();)应该是我点击的图像对象?

请解释一下我有可能,怎么样?

Hei*_*bug 7

好吧,首先你要在(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建议您可以执行以下操作:

  1. 为要显示的每个图像创建一个JLabel
  2. 使用JLabel的setIcon()方法指定将在每个标签上显示的图像.
  3. 将标签添加到JPanel
  4. 为每个JLabel添加一个鼠标监听器

这种方法有很大的好处:您不必担心鼠标坐标,因为每个JLabel都有相对的鼠标监听器.您应该考虑的唯一一件事是:

使用Component而不是绘制图像,你将无法绝对使用它们,但你必须使用适当的LayoutManager来布局你的JLabel.