b1.addActionListener(e -> d1.setVisible(true));
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
d1.setVisible(true);
}
});
关键就是这里为什么会有e,其原因就是事件监听器(ActionListener对象是其中之一)是特殊的Java对象。
书中解释如下:
当用户单击一个按钮,或者单击某个菜单项,或者单击窗口右上角的状态按钮时,这些动作就会触发一个相应的事件,该事件由AWT封装成相应的Event对象,该事件会触发事件源上注册的事件监听器(特殊的Java对象),事件监听器调用对应的事件处理器(事件监听器里的实例方法)来做出相应的响应。
所以,其实在事件发生的时候,ActionListener是被传入了Event对象的!
所以,Lambda表达式才会有参数。