2014-02-18 6 views
0

Как я могу добавить прослушиватель мыши к изображению или imageIcon в Java?Добавление прослушивателя мыши к изображению или изображению Значок в java

Вот мой код. Я хочу сделать что-либо с помощью imageIcon после щелчка мышью по нему.

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; 
    } 
} 

} 
+0

Вы не можете, но вы можете добавить его в JLabel или контейнера, что изображение нарисовано, но вам нужно будет проверить если мышь воздействовала в пределах изображения на основании того, где она находится в контейнере. Взгляните на [Как использовать MouseListeners] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) – MadProgrammer

+0

дайте мне совет, пожалуйста, есть ли другие способы рисования изображения и переопределить onclick в теме ? без использования JLable или каких-либо проверок? – Ashot

ответ

0

Если вы не хотите использовать JLabel, вы можете нарисовать изображение на панели, переопределив метод paintComponent. Затем вы можете добавить слушателя в свой JPanel.I woud сильно рекомендую вам использовать JLabel, но если вы все еще предпочитаете другой способ, здесь вы можете увидеть пример того, как это сделать. How to set background image in 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    
    } 
}); 
+1

"без использования JLable или каких-либо проверок?". Я не понимаю, как это можно сделать. В моем случае OP будет иметь дело с 'JLabel' и в вашем случае с проверкой границ –

+0

Я думаю, что ярлык - это путь. –

+0

JLabel lable = new JLabel(); lable.add (новые Bubbles (10, 10, 10, null)); lable.setOpaque (false); lable.addMouseListener (новый MouseAdapter() { общественного недействительными mouseClicked (MouseEvent е) { System.out.println ("mouseClicked");} }); – Ashot

2

Что вы можете сделать то, что вы можете использовать JLabel и установить ImageIcon к нему. сделайте JLabel прозрачным, используя setOpaque(false). Затем добавьте к нему слушателя и сделайте все, что вы хотите сделать :)

+0

JLabel прозрачно по умолчанию – MadProgrammer

+0

JLabel lable = new JLabel(); lable.add (новые Bubbles (10, 10, 10, null)); lable.setOpaque (false); lable.addMouseListener (новый MouseAdapter() { общественного недействительными mouseClicked (MouseEvent е) { System.out.println ("mouseClicked");} }); – Ashot

+0

это правда? Я пробовал, но он не работает – Ashot

1

Самым простым решением было бы использовать JLabel и установить это свойство icon. См. How to use labels для более подробной информации.

Если вы должны сами нарисовать изображение (например, хотите применить эффекты или выполнить анимацию в контейнере), то вам необходимо добавить MouseListener в контейнер, который отображает изображение и проверит, есть ли событие мыши происходило в контексте изображения на основе его местоположения и размера.

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); 
      } 
     } 

    } 

} 

Взгляните на Performing Custom Painting и How to use Mouse Listeners для получения более подробной информации

+0

Хорошо, я попробую ... Спасибо! – Ashot

Смежные вопросы