有人可以向我解释为什么这不起作用吗?
public class ListenerTest {
public static void addListener(Node node) {
node.visibleProperty().addListener(ListenerTest::handleVisibleChanged);
}
private static void handleVisibleChanged(ObservableValue<? extends Boolean> observable,
Boolean oldValue, Boolean newValue) {
// Do something
}
}
如您所见,我使用Java 8方法引用将静态方法指定为JavaFX更改侦听器。它编译得很好,但是当可见属性发生变化时,不会调用handleVisibleChanged()方法。
请不要提供解决方法或问我为什么要这样做。把它想象成一种练习。 : - )
答案 0 :(得分:2)
这是一个使用您的两种方法并按预期工作的简单示例:单击该按钮时,将打印一条消息。
public class ListenerTest extends Application {
@Override
public void start(Stage stage) throws Exception {
Label label = new Label("You can see me");
addListener(label);
Button button = new Button("Hide/Show");
button.setOnAction(e -> label.setVisible(!label.isVisible()));
Scene scene = new Scene(new VBox(20, label, button));
stage.setScene(scene);
stage.show();
}
public static void addListener(Node node) {
node.visibleProperty().addListener(ListenerTest::handleVisibleChanged);
}
private static void handleVisibleChanged(ObservableValue<?> a, Boolean b, Boolean newValue) {
System.out.println("new value: " + newValue);
}
public static void main(String[] args) {
launch();
}
}