2011-01-19 70 views
1

我想在JLabel中有一个可点击的图标(一个ImageIcon对象)。我怎样才能添加一个MouseListener或任何ActionListener只是该图标。有没有其他的方式知道图标是否被点击?我使用setIcon()方法为JLabel设置其图标。如何将鼠标监听器添加到JLabel中嵌入的ImageIcon中?

谢谢。

+1

为什么不用`Icon`的`JButton`? – trashgod 2011-01-19 00:56:31

+0

相关:http://stackoverflow.com/questions/1281612/adding-a-child-component-to-a-jbutton – finnw 2011-01-19 01:03:18

+0

JButton的图标的确对鼠标事件做出响应,而JLabel的图标不会“T。 – 2015-08-02 20:11:02

回答

2

您可以在容器中放置两个单独的JLabel,第一个放置文本,第二个放置图标,然后将鼠标侦听器添加到图标JLabel。

-4

您可以使用此代码来解决你的问题:

public class Test extends JFrame { 
    private JLabel label; 
    ImageIcon icon = new ImageIcon("example.gif"); 
    public Test(){ 
     label = new JLabel(icon); 
     label.addMouseListener(new MouseListener() { 

     public void mouseClicked(MouseEvent e) { 
     //for example  
      JOptionPane.showMessageDialog(null, "Hello"); 

     } 

     public void mousePressed(MouseEvent e) { 
     } 

     public void mouseReleased(MouseEvent e) { 
     } 

     public void mouseEntered(MouseEvent e) { 
     } 

     public void mouseExited(MouseEvent e) { 
     } 
    }); 
} 

}

1

这种方法非常哈克,但为我工作。

JLabel.addMouseListener(new MouseAdapter(){ 
     public void mousePressed(MouseEvent me){ 
      try { 
       Robot robot = new Robot(); 
       if(JLabel.getBounds().contains(me.getPoint()) && !robot.getPixelColor(me.getXOnScreen(),me.getYOnScreen()).equals(page.getBackground())){ 
        //Do action here 
       } 
      } catch (AWTException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    });