gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:03:23 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com