我可以向JLabel添加一个动作侦听器吗?
我想用JLabel替换JButton,并且希望我的代码在单击JLabel时执行某些操作。我可以向JLabel添加一个动作侦听器吗?
当我有一个JButton我用动作监听器来处理按钮点击:
myButton.addActionListener(new clicksListener(arg1,this))
当我更换myButton
通过myLabel
我在Eclipse以下错误信息:
的方法 addActionListener(ChipsListener)为 undefined为类型JLabel
但我知道应该可以将附加的Click处理程序附加到JLabel。有人知道如何做到这一点吗?
将MouseListener
添加到JLabel
。
因为JLabel
是Component
,您可以添加MouseListener
s到它。使用该界面并在您的MouseListener
上写上mouseClicked
事件来处理点击。
更简单的方法是使用JButton,因为它已通过使用ActionListener支持此功能。
您可以将JButton看起来像一个JLabel使用:
button.setBorderPainted(false);
这种方法是当你要处理的鼠标点击,因为一个ActionEvent是保证生成的,而作为的mouseClicked事件中使用时,可能不会在所有情况下生成MouseListener,这可能会混淆用户。
恐怕它更复杂,请参阅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
什么情况下不会生成mouseClicked事件? – Buffalo 2013-04-03 07:37:55
@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");
}
});
总是尝试提供一些解释,除了发布代码。同时它可能对你来说显然微不足道,对其他人来说可能很难理解。 – 2016-01-05 16:15:19
我不明白你的逻辑。你的意思是所有'Component'都可以添加'MouseListener'(任何引用)?什么样的小部件可以添加'ActionListener'? – Tony 2014-12-31 10:55:56
是的,'addMouseListener()'方法在'Component'上定义。当鼠标进入或退出组件时,或者在组件内按下按钮或在组件内按下按钮后,此类会生成MouseEvent对象。任何扩展Component的类都可以有任意数量的监听这些事件的MouseListener引用。 addActionListener()'在'AbstractButton'上定义,并在按下按钮时生成'ActionEvent'对象。由于'JLabel'没有扩展'AbstractButton',它不会生成'ActionEvent'对象。试试'JButton'。 – 2014-12-31 20:23:24