我可以向JLabel添加一个动作侦听器吗?

问题描述:

我想用JLabel替换JButton,并且希望我的代码在单击JLabel时执行某些操作。我可以向JLabel添加一个动作侦听器吗?

当我有一个JButton我用动作监听器来处理按钮点击:

myButton.addActionListener(new clicksListener(arg1,this)) 

当我更换myButton通过myLabel我在Eclipse以下错误信息:

的方法 addActionListener(ChipsListener)为 undefined为类型JLabel

但我知道应该可以将附加的Click处理程序附加到JLabel。有人知道如何做到这一点吗?

MouseListener添加到JLabel

因为JLabelComponent,您可以添加MouseListener s到它。使用该界面并在您的MouseListener上写上mouseClicked事件来处理点击。

+0

我不明白你的逻辑。你的意思是所有'Component'都可以添加'MouseListener'(任何引用)?什么样的小部件可以添加'ActionListener'? – Tony 2014-12-31 10:55:56

+2

是的,'addMouseListener()'方法在'Component'上定义。当鼠标进入或退出组件时,或者在组件内按下按钮或在组件内按下按钮后,此类会生成MouseEvent对象。任何扩展Component的类都可以有任意数量的监听这些事件的MouseListener引用。 addActionListener()'在'AbstractButton'上定义,并在按下按钮时生成'ActionEvent'对象。由于'JLabel'没有扩展'AbstractButton',它不会生成'ActionEvent'对象。试试'JButton'。 – 2014-12-31 20:23:24

更简单的方法是使用JButton,因为它已通过使用ActionListener支持此功能。

您可以将JButton看起来像一个JL​​abel使用:

button.setBorderPainted(false); 

这种方法是当你要处理的鼠标点击,因为一个ActionEvent是保证生成的,而作为的mouseClicked事件中使用时,可能不会在所有情况下生成MouseListener,这可能会混淆用户。

+0

恐怕它更复杂,请参阅http://stackoverflow.com/questions/3025320/draw-a-jbutton-to-look-like-a-jlabel-or-at-least-without-the-button-edge – xmedeko 2012-10-11 14:18:08

+0

什么情况下不会生成mouseClicked事件? – Buffalo 2013-04-03 07:37:55

+1

@Buffalo,当在同一点处生成mousePressed和mouseReleased事件时,会生成mouseClicked事件。因此,如果用户在这两个事件之间将鼠标移动一个像素,则不会获得mouseClicked。 – camickr 2013-04-03 15:28:03

/*add a mouselistener instead and listen to mouse clicks*/ 
    jlable.addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        System.out.println("Yay you clicked me"); 
       } 

      }); 
+0

总是尝试提供一些解释,除了发布代码。同时它可能对你来说显然微不足道,对其他人来说可能很难理解。 – 2016-01-05 16:15:19