Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以向JLabel添加操作侦听器吗?_Java_Swing - Fatal编程技术网

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

Java 我可以向JLabel添加操作侦听器吗?,java,swing,Java,Swing,我想用JLabel替换JButton,我想让我的代码在单击JLabel时执行一些操作 当我使用JButton时,我使用action listener处理对按钮的单击: myButton.addActionListener(new clicksListener(arg1,this)) 当我将myButton替换为myLabel时,我在Eclipse中收到以下错误消息: 方法 addActionListener(ChipsListener)是 类型JLabel未定义 但我知道应该可以将单击处理程序

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

当我使用JButton时,我使用action listener处理对按钮的单击:

myButton.addActionListener(new clicksListener(arg1,this))
当我将
myButton
替换为
myLabel
时,我在Eclipse中收到以下错误消息:

方法 addActionListener(ChipsListener)是 类型JLabel未定义


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

JLabel
中添加一个
MouseListener


由于
JLabel
是一个
组件
,因此可以向其添加
MouseListener
s。使用该界面并在
MouseListener
上编写
mouseClicked
事件来处理单击。

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

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

button.setBorderPainted( false );

此方法适用于您想要处理鼠标单击的情况,因为保证会生成ActionEvent,而使用鼠标侦听器时可能不会在所有情况下生成as mouseClicked事件,这可能会让用户感到困惑。

当然。jLabel有一个方法,允许您附加MouseListener对象。MouseListener对象需要一个MouseAdapter()对象。MouseAdapter是一个抽象类,理想情况下,它可以作为一个适配器,用于创建动态监听器来完成任务

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

            });
JLabel lb = new JLabel(An image icon, if you'd like.);

//now lets attach a listener to your JLabel
lb.addMouseListener(new MouseAdapter() 
{
    @Override
    public void mouseClicked(MouseEvent e) 
    {
        //THIS CODE WILL RUN WHEN THE EVENT OF CLICKING IS RECEIVED.
        //example of something you could do below.
        new Random().ints().limit(60).forEach(System.out::println);
    }
});

恐怕更复杂,看看在什么情况下不会生成mouseClicked事件?@Buffalo,mousePressed和mouseerelease事件在同一点生成时,会生成mouseClicked事件。因此,如果用户在这两个事件之间移动鼠标一个像素,你就不会被鼠标点击。谢谢你的回复!这不是过多应用程序的默认实现吗?此外,如果你真的想克服这个问题,你可以在MouseListener的mousePressed实现中施展你的魔法。你是说所有的
组件
都可以添加
鼠标侦听器
(任何参考)?什么样的小部件可以添加
ActionListener
?是的,
addMouseListener()
方法是在
组件上定义的。此类,当鼠标进入或退出组件时,或当按钮在组件内按下或在组件内按下后释放时,生成
MouseEvent
对象。扩展
组件
的任何类都可以有任意数量的
鼠标侦听器
引用来侦听这些事件
addActionListener()
AbstractButton
上定义,并在按下按钮时生成
ActionEvent
对象。由于
JLabel
不扩展
AbstractButton
,因此它不会生成
ActionEvent
对象。尝试
JButton
。总是尝试提供一些解释,而不仅仅是发布代码。同时,这对你来说显然是微不足道的,对其他人来说可能很难理解。