在 Java 中,如何使用 lambda 表示式實現 PropertyChangeListener?
PropertyChangeListener 是 java.beans 包中的一個函式介面。它有抽象方法 propertyChange(),並且在繫結屬性更改時呼叫。此方法採用一個 PropertyChangeEvent 引數,其中包含有關事件源和已更改屬性的詳細資訊。支援繫結屬性的 bean 可以使用 PropertyChangeSupport 。它可以管理監聽器列表並分派屬性更改事件。PropertyChangeListener 的實現者扮演觀察者的角色,而包裝 PropertyChangeSupport 的 bean 是可觀察者。
語法
void propertyChange(PropertyChangeEvent evt)
示例
import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class PropertyChangeListenerLambdaTest {
public static void main(String [] args) {
new PropertyChangeListenerLambdaTest();
}
public PropertyChangeListenerLambdaTest() {
JFrame frame = new JFrame("First Frame");
final JLabel label = new JLabel("Observing...");
label.setFont(new Font("Dialog", Font.PLAIN, 18));
frame.add(label);
frame.getRootPane().setBorder(new EmptyBorder(10, 10, 10, 10));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 150);
frame.setLocation(200, 200);
frame.setVisible(true);
MessageBean bean = new MessageBean();
bean.addPropertyChangeListener(e -> // lambda expression
label.setText((String) e.getNewValue())
);
new Frame1(bean);
}
private class Frame1 {
private int clicks;
Frame1(MessageBean bean) {
JFrame frame = new JFrame("Second Frame");
JLabel label = new JLabel("Click anywhere to fire a property change event");
label.setFont(new Font("Dialog", Font.PLAIN, 18));
frame.add(label);
frame.getRootPane().setBorder(new EmptyBorder(10, 10, 10, 10));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450, 150);
frame.setLocation(600, 200);
frame.setVisible(true);
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String data = "Click-count [" + ++clicks + "]";
bean.setValue(data);
}
});
}
}
}
class MessageBean {
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
private String value;
public void addPropertyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
support.removePropertyChangeListener(listener);
}
public String getValue() {
return value;
}
public void setValue(String newValue) {
String oldValue = value;
value = newValue;
support.firePropertyChange("value", oldValue, newValue);
}
}輸出
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP