¿Cómo puedo añadir detector de ratón a la imagen o imageIcon en Java?

Aquí está mi código. Quiero hacer nada con imageIcon después del ratón sobre él.

public class Bubbles extends JPanel {

public static final int LINE_OUT = 440;
int x = 20;
int y = 50;
int v = 4;

Image img = new ImageIcon("res/lop.png").getImage();
BackSide back;


public Bubbles(int x, int y, int v, BackSide back) {
    this.x = x;
    this.y = y;
    this.v = v;
    this.back = back;
    setFocusable(true);

}


public void move() {
    if (y >= 440) {
        y = 0;
    } else {
        y += v;
    }
}

}
  • No se puede, pero usted puede agregar a un JLabel o el contenedor que la imagen está pintada, pero usted tendrá que comprobar si el ratón se tramite dentro de los límites de la imagen en función de dónde se encuentra dentro del contenedor. Echa un vistazo a Cómo utilizar MouseListeners
  • denme consejos por favor, hay otras maneras para pintar una imagen y relize onclick en él ? sin el uso de JLable o cualquier comprobación?
InformationsquelleAutor Ashot | 2014-02-18

3 Comentarios

  1. 0

    Si usted no quiere utilizar JLabel usted puede pintar la imagen en el panel reemplazando método paintComponent.A continuación, puede añadir un detector a su JPanel.Yo le recomiendo encarecidamente que utilice JLabel pero si aún así prefieres de otra manera,aquí puede ver algunos ejemplos de cómo hacerlo. Cómo establecer la imagen de fondo en Java?.

    Icon icon = new ImageIcon("give path of the image");
    JLabel lb = new JLabel(icon);
    //now set listener for label.
    lb.addMouseListener(new MouseAdapter() 
    {
        @Override
        public void mouseClicked(MouseEvent e) 
        {
            //statement             
        }
    });
    • «sin el uso de JLable o cualquier comprobación?». No veo cómo puede hacerse. En mi caso el OP tendrá que lidiar con JLabel y en su caso con la comprobación de los límites
    • Creo que la etiqueta es la manera de ir.
    • JLabel etiqueta = new JLabel(); lable.agregar(nuevas Burbujas(10, 10, 10, null)); lable.setOpaque(false); lable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e ){ System.a cabo.println(«mouseClicked»); } });
    • He intentado como esta pero no funciona
  2. 2

    Lo que usted puede hacer es que se puede utilizar un JLabel y establecer el ImageIcon a ella. hacer el JLabel transparente mediante el uso de setOpaque(false). A continuación, agregue escucha y hace lo que usted desea hacer 🙂

    • JLabel es transparente por defecto
    • JLabel etiqueta = new JLabel(); lable.agregar(nuevas Burbujas(10, 10, 10, null)); lable.setOpaque(false); lable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e ){ System.a cabo.println(«mouseClicked»); } });
    • es esto cierto ? Lo intenté, pero no de trabajo
    • No agregue las «Burbujas» a la etiqueta, establecer las etiquetas de icono de la propiedad para cualquier imagen que desea utilizar.
  3. 1

    La solución más sencilla sería utilizar un JLabel y el conjunto es icon de la propiedad. Ver Cómo utilizar etiquetas para obtener más detalles.

    Si debe pintar la imagen de sí mismo (es decir, usted desea aplicar efectos o realizar la animación a través de un contenedor), entonces usted necesita para agregar el MouseListener para el envase, que es la representación de la imagen y prueba a ver si el ratón evento ocurrió dentro del contexto de la imagen en función de su ubicación y tamaño.

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    public class ImageMouseListener {
    public static void main(String[] args) {
    new ImageMouseListener();
    }
    public ImageMouseListener() {
    EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException ex) {
    } catch (InstantiationException ex) {
    } catch (IllegalAccessException ex) {
    } catch (UnsupportedLookAndFeelException ex) {
    }
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    frame.add(new ImagePane());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    });
    }
    public class ImagePane extends JPanel {
    private BufferedImage img;
    private Point imgPoint;
    public ImagePane() {
    try {
    img = ImageIO.read(...);
    imgPoint = new Point(100, 100);
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
    if (img != null && imgPoint != null) {
    Point me = e.getPoint();
    Rectangle bounds = new Rectangle(imgPoint, new Dimension(img.getWidth(), img.getHeight()));
    if (bounds.contains(me)) {
    System.out.println("I was clicked!");
    }
    }
    }
    });
    }
    @Override
    public Dimension getPreferredSize() {
    return new Dimension(400, 400);
    }
    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (img != null && imgPoint != null) {
    g.drawImage(img, imgPoint.x, imgPoint.y, this);
    }
    }
    }
    }

    Echa un vistazo a Realización De Pintura Personalizada y Cómo utilizar el Ratón Oyentes para más detalles

    • Ok voy a probarlo …Gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here