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

Rom*_*man 15 java swing

我想用JLabel替换JButton,我希望我的代码在单击JLabel时执行一些操作.

当我使用JButton时,我使用了动作监听器来处理按钮上的点击:

myButton.addActionListener(new clicksListener(arg1,this))
Run Code Online (Sandbox Code Playgroud)

当我替换为时myButton,myLabel我在Eclipse中收到以下错误消息:

对于JLabel类型,未定义方法addActionListener(ChipsListener)

但我知道应该可以将单击处理程序附加到JLabel.有人知道怎么做吗?

Eri*_*son 26

添加MouseListenerJLabel.

因为JLabel是a Component,你可以添加MouseListeners.使用该界面并mouseClicked在您的上面编写事件MouseListener来处理点击.

  • 是的,`addMouseListener()`方法在`Component`上定义.此类在鼠标进入或退出组件时生成"MouseEvent"对象,或者在组件中按下按钮或在组件中按下后释放按钮.任何扩展`Component`的类都可以有任意数量的`MouseListener`引用来监听这些事件.`addActionListener()`在`AbstractButton`上定义,并在按下按钮时生成`ActionEvent`对象.由于`JLabel`不扩展`AbstractButton`,因此它不会生成`ActionEvent`对象.试试`JButton`. (2认同)

cam*_*ckr 12

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

您可以使用以下命令使JButton看起来像JLabel:

button.setBorderPainted( false );
Run Code Online (Sandbox Code Playgroud)

这种方法适用于您想要处理mouseClick的情况,因为保证生成ActionEvent,而使用MouseListener时的mouseClicked事件可能无法在所有情况下生成,这可能会使用户感到困惑.


kup*_*aff 11

/*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");
                }

            });
Run Code Online (Sandbox Code Playgroud)