Java 将JLabel添加到MouseListener

Java 将JLabel添加到MouseListener,java,swing,Java,Swing,第一次海报在这里 我正在开发一个Java照片查看器库。 我想将所有标签从ArrayList添加到MouseListener。所以我可以在一个新的大窗口中打开用户点击的图片 我有一个文件选择器,用户可以在其中选择图片的数量。我缩放它们并将它们放在一个: ArrayList scaled=新的ArrayList() 错误:类型组件中的方法addMouseListener(MouseListener)不适用于参数(new ActionListener(){}) 我试着用 for (int i=0; i

第一次海报在这里

我正在开发一个Java照片查看器库。 我想将所有标签从ArrayList添加到MouseListener。所以我可以在一个新的大窗口中打开用户点击的图片

我有一个文件选择器,用户可以在其中选择图片的数量。我缩放它们并将它们放在一个:

ArrayList scaled=新的ArrayList()

错误:类型组件中的方法addMouseListener(MouseListener)不适用于参数(new ActionListener(){})

我试着用

for (int i=0; i< scaled.size(); i++){
                        panel.add(new JLabel(new ImageIcon (scaled.get(i))));   
                        JLabel l = new JLabel(new ImageIcon(scaled.get(i)));
                        l.addMouseListener(this); //<- Compiler Error

                        }
for(int i=0;i
首先,您没有将标签添加到MouseStener。您将MouseStener添加到标签。您没有实现MouseStener接口,因此会出现编译错误。您需要实现所有方法(mousePressed、MouseRelease…)

阅读Swing教程中关于如何为工作示例编写鼠标侦听器的部分

此外,一旦鼠标侦听器工作,就不需要创建两个标签。基本代码可能类似于:

JLabel l = new JLabel(new ImageIcon(scaled.get(i)));
label.addMouseListener(this); //<- Compiler Error
panel.add( label );
JLabel l=newjlabel(新图像图标(scaled.get(i));

label.addMouseListener(this);//我将使用数组存储所有鼠标信息。 例如:

public class MyApp extends JFrame implements MouseListener, MouseWheelListener {

    public int[] mouse=new int[5];

    public void mousePressed(MouseEvent m) {
         if (m.getButton() == m.BUTTON1) {
             mouse[2]=1;
         }
         if (m.getButton() == m.BUTTON2) {
             mouse[3]=1;
         }
         if (m.getButton() == m.BUTTON3) {
             mouse[4]=1;
         }
    }
    public void mouseClicked(MouseEvent m) {
         if (m.getButton() == m.BUTTON1) {
             mouse[2]=3;
         }
         if (m.getButton() == m.BUTTON2) {
             mouse[3]=3;
         }
         if (m.getButton() == m.BUTTON3) {
             mouse[4]=3;
         }
    }
    public void mouseReleased(MouseEvent m) {
         if (m.getButton() == m.BUTTON1) {
             mouse[2]=2;
         }
         if (m.getButton() == m.BUTTON2) {
             mouse[3]=2;
         }
         if (m.getButton() == m.BUTTON3) {
             mouse[4]=2;
         }
    }
    public void mouseEntered(MouseEvent m) {
    }
    public void mouseExited(MouseEvent m) {
    }
    public void mouseWheelMoved(MouseWheelEvent w) {
         mouse[3]=w.getWheelRotation();
    }
    public MyApp() {
         super("MyApp");
         //Do your stuff here...
         //...
         //...
         setTitle("Image Picker");
         requestFocus();
         addMouseListener(this);
         addMouseWheelListener(this);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setSize(1400,1000);
         setResizable(true);
         setVisible(true);
         int gc=0;
         Rectangle r;
         while (true){
             try {
             Thread.sleep(33);
             } catch(InterruptedException bug) {
             Thread.currentThread().interrupt();
             System.out.println(bug);
             }
             r=getComponents()[0].getBounds();
             gc=gc+1;
             if (gc==500) {
                 System.gc();
                 gc=0;
             }
             mouse[0]=MouseInfo.getPointerInfo().getLocation().x-getComponents()[0].getLocationOnScreen().x;
             mouse[1]=MouseInfo.getPointerInfo().getLocation().y-getComponents()[0].getLocationOnScreen().y;
             //Display labels
        }
    }

    public static void main(String args[]){
        new MyApp();
    }
}
鼠标
阵列将是:

mouse[0] - mouse x pos
mouse[1] - mouse y pos
mouse[2] - left mouse button
mouse[3] - middle mouse button
mouse[4] - right mouse button
mouse[5] - mouse wheel rotation, 0 if none, else -n to n
检查点(鼠标)是否位于矩形(标签)上方应该很容易。如果您不知道如何获取标签的位置,只需使用以下代码:

Rectangle r=getComponents()[1+n].getBounds();
//r.x, r.y, r.width, r.height

希望它能帮助您!

有什么问题吗?很抱歉没有澄清。它不允许我将JLabel l添加到MouseListener中,为您的MouseListener创建一个内部类,例如MyMouseListener,然后实现它的abtract方法。在for循环中,l.addMouseListener(新的MyMouseListener());还要看一下Oracle的文档:如果我错了,请纠正我,但它说:类ImageViewerFrame扩展了JFrame实现了MouseListener,所以我实现了MouseListener@StackOverFlowUser1997,代码中的“this”指的是ActionListener类,而不是
ImageViewerFrame
类。请尝试使用“ImageViewerFrame.this”作为参数。(“ImageViewerFrame.this”作为参数。)到目前为止看起来不错。我仍在测试。。如果问题已解决,将向您报告。问题已解决。感谢所有人的贡献和快速帮助。是否要发布工作代码?注释中的格式不太好
Rectangle r=getComponents()[1+n].getBounds();
//r.x, r.y, r.width, r.height