Java8已经出了三四年了,据说今年年底要出Java9了,但是这两天在找资料的过程中发现国内的网站仍然没有lambda表达式在addMouseListener的内容。所以自己写(搬运)一个吧。
先说明一下,个人而言,先学的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!【那还是用原来的办法吧】