小编Nov*_*ovi的帖子

双向JavaFX绑定被不相关的代码破坏

更新:找到一种更简单的方法来重现错误的行为

当我在三个变量之间设置双向JavaFX绑定时,这种绑定有时会被不相关的代码破坏.

我创建了一个能够重现错误行为的小示例程序:

在MainController中,设置绑定并添加三个侦听器以输出变量的新值:

package bug;

import java.nio.file.Path;

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXML;

public class MainController {

    @FXML
    private Foo foo;

    @FXML
    private Bar bar;

    private ObjectProperty<Path> pathProperty = new SimpleObjectProperty<>();

    @FXML
    private void initialize() {

    pathProperty.addListener((observablePath, oldPath,
        newPath) -> {
        System.out.println(newPath);
    });

    foo.pathProperty().addListener((observablePath, oldPath,
        newPath) -> {
        System.out.println(newPath);
    });

    bar.pathProperty().addListener((observablePath, oldPath,
        newPath) -> {
        System.out.println(newPath);
        });

    bar.pathProperty()
        .bindBidirectional(pathProperty);
    foo.pathProperty()
        .bindBidirectional(pathProperty);
    }

}
Run Code Online (Sandbox Code Playgroud)

FooController使用由按钮单击触发的计数器更改其中一个变量.按下按钮应输出相同的值三次,因为我们设置了三个监听器.只要不更改DatePicker的值,这就可以正常工作.但之后每个号码只输出一次.

package bug;

import java.nio.file.Paths;
import java.time.LocalDate;

import javafx.beans.value.ChangeListener;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.DatePicker;

public …
Run Code Online (Sandbox Code Playgroud)

data-binding javafx

1
推荐指数
1
解决办法
1201
查看次数

标签 统计

data-binding ×1

javafx ×1