java - 使用静态方法作为 JavaFX 更改监听器

标签 java javafx java-8

有人可以向我解释为什么这不起作用吗?

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()方法。

请不要提供解决方法或询问我为什么要这样做。将其视为一种练习。 :-)

最佳答案

这是一个简单的示例,它使用您的两种方法并按预期工作:单击按钮时,会打印一条消息。

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();
    }
}

关于java - 使用静态方法作为 JavaFX 更改监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485579/

相关文章:

java - Ubuntu 没有这样的文件或目录

Java 8 流和可变参数

java - 添加Api管理时ServiceConfigException

java - NetBeans 8.1 激活失败

java - 我如何在 JavaFX 中的所有场景中显示我的 MenuBar

exception - Java 8 并行流如何处理抛出的异常?

java - 空比较

java - 具有泛型类型的 Map.Entry 的树集实现

Java如何检查mysql是否正在运行

java - TextFlow vs TextArea,布局问题;为什么 TextFlow 在 TextArea 没有的地方弄乱了它?