Java 8 Lambda表达式在addMouseListener中的使用

#阅读本文大约需要2.33分钟

Java8已经出了三四年了,据说今年年底要出Java9了,但是这两天在找资料的过程中发现国内的网站仍然没有lambda表达式在addMouseListener的内容。所以自己写(搬运)一个吧。好像这是我CSDN上的第一篇文章。版权copyright,抄袭是正确的。


(原问答来自stackoverflow)【stackoverflow】http://stackoverflow.com/questions/21833537/java-8-lambda-expressions-what-about-multiple-methods-in-nested-class


先说明一下,个人而言,先学的C++,后来学Java发现Java的匿名对象这个东西不错,一些只需要使用一次的变量不用再去命名就直接拿来当做参数。很多东西也方便了许多,但是这也是有弊端的,一些接口的方法(function)很多,代码看起来就很让人烦,加上eclipse的那个//TODO 自动生成神烦(当然要取消掉也可以,自行谷歌百度一下)

然后lambda表达式就出来了,其实在AndroidStudio里面就有lambda表达式的影子,折叠代码的时候一些监听事件就会以lambda表达式的形式展现,不过这也不是真正的lambda,(关于AS里面使用Java8的lambda表达式开发安卓也可以自行百度哈~)

【前方干货】
1. 先建立一个接口类
2. 然后把你需要用来使用lambda的那个方法(function)删掉!!其余的function用default,这里用到的是mouseClicked

//MyMouse.java
package com;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
interface MyMouse extends MouseListener{
    /*
    @Override
    default void mouseClicked(MouseEvent e) {
    }
    */
    @Override
    public default void mousePressed(MouseEvent e) {
    }
    @Override
    public default void mouseReleased(MouseEvent e) {
    }
    @Override
    public default void mouseEntered(MouseEvent e) {
    }
    @Override
    public default void mouseExited(MouseEvent e) {
    }
}

3.然后在你原先的class中addMouseListener,
JFrame JPanel等这一些Component组件
我的是 JFrame jf

//Test.java
//……
jf.addMouseListener((MyMouse)(e)->{System.out.println(e.getX());});

然后就可以了。
还有相关的是在JButton上加addActionListener这个就方便了。少了好几行东西。
我的是JButton cancel;

    cancel.addActionListener((e)->{
        //TODO  
    });
    //二者等价
    cancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
        //TODO
        }
    });

另外要说明的是:lambda表达式适用于匿名对象只有一个函数的,比如多线程的run,像mouseListener这个比较特殊有很多个就要自己取舍了。至于为什么这么多次一举。。。因为我觉得传数据给 继承的listener还不如用lambda方便。真的是习惯了lambda表达式这个语法糖就觉得这个好用。

当然了,如果你需要鼠标点击一个事件按下一个事件释放一个事件的话可以无视本文或者自己找更麻烦的方法ヾノ≧∀≦)o!【那还是用原来的办法吧】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值