Java 8 Java 8 Lambda表达式从动作事件匿名内部类调用特定方法
我在JPanel上有一个文本字段,在这个文本字段上有一个文档侦听器。 由于文档侦听器包含三个methodremoveUpdate、insertUpdate和changeUpdate,所以如何使用Lambda表达式调用特定的方法Java 8 Java 8 Lambda表达式从动作事件匿名内部类调用特定方法,java-8,Java 8,我在JPanel上有一个文本字段,在这个文本字段上有一个文档侦听器。 由于文档侦听器包含三个methodremoveUpdate、insertUpdate和changeUpdate,所以如何使用Lambda表达式调用特定的方法 field.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent a
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
button.setText(field.getText());
}
@Override
public void changedUpdate(DocumentEvent arg0) {
}
});
如何使用类似field.getDocument.addDocumentListenerlambda表达式的Lambda表达式调用此文档侦听器insertUpdate方法 TL;医生:你不能。DocumentListener不是一个
为了使lambda充当特定接口的实例,该接口必须具有单个抽象方法
DocumentListener有3个抽象方法,因此您需要创建一个扩展DocumentListener的SMI:
现在,您可以使用lambda表达式创建InsertListener的实例:
final InsertListener is = e -> button.setText(field.getText());
您可以将其传递到一个方法中:
field.getDocument().addDocumentListener(is);
例如,您还可以创建一个如下所示的接口:
interface InsertListener extends DocumentListener {
void onEvent(DocumentEvent.EventType type, DocumentEvent e);
@Override
default void insertUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void removeUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void changedUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
}
现在您可以按类型处理任何事件:
final InsertListener is = (t, e) -> {
if (t == DocumentEvent.EventType.INSERT) {
button.setText(field.getText());
}
};
这比匿名类稍微紧凑一些,但不多。TL;医生:你不能。DocumentListener不是一个
为了使lambda充当特定接口的实例,该接口必须具有单个抽象方法
DocumentListener有3个抽象方法,因此您需要创建一个扩展DocumentListener的SMI:
现在,您可以使用lambda表达式创建InsertListener的实例:
final InsertListener is = e -> button.setText(field.getText());
您可以将其传递到一个方法中:
field.getDocument().addDocumentListener(is);
例如,您还可以创建一个如下所示的接口:
interface InsertListener extends DocumentListener {
void onEvent(DocumentEvent.EventType type, DocumentEvent e);
@Override
default void insertUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void removeUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void changedUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
}
现在您可以按类型处理任何事件:
final InsertListener is = (t, e) -> {
if (t == DocumentEvent.EventType.INSERT) {
button.setText(field.getText());
}
};
这比匿名类稍微紧凑一些,但不多