我想在JLabel中有一个可点击的图标(一个ImageIcon对象)。我怎样才能添加一个MouseListener或任何ActionListener只是该图标。有没有其他的方式知道图标是否被点击?我使用setIcon()方法为JLabel设置其图标。如何将鼠标监听器添加到JLabel中嵌入的ImageIcon中?
谢谢。
我想在JLabel中有一个可点击的图标(一个ImageIcon对象)。我怎样才能添加一个MouseListener或任何ActionListener只是该图标。有没有其他的方式知道图标是否被点击?我使用setIcon()方法为JLabel设置其图标。如何将鼠标监听器添加到JLabel中嵌入的ImageIcon中?
谢谢。
您可以在容器中放置两个单独的JLabel,第一个放置文本,第二个放置图标,然后将鼠标侦听器添加到图标JLabel。
您可以使用此代码来解决你的问题:
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) {
}
});
}
}
这种方法非常哈克,但为我工作。
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();
}
}
});
为什么不用`Icon`的`JButton`? – trashgod 2011-01-19 00:56:31
相关:http://stackoverflow.com/questions/1281612/adding-a-child-component-to-a-jbutton – finnw 2011-01-19 01:03:18
JButton的图标的确对鼠标事件做出响应,而JLabel的图标不会“T。 – 2015-08-02 20:11:02