我右边的边框包含一个TextField。该中心包含一个可拖动的StackPane。我正在尝试将stackpane的layoutX绑定到textfield。但是,由于我使用的是MVP,因此中间有一个模型(控制器)。
文本字段(称为'idTopX'来自FXML布局)具有与模型的绑定
idTopX.textProperty().bindBidirectional(model.topXProperty);
其中model.topXProperty定义为:
public StringProperty topXProperty = new SimpleStringProperty();
反过来,模型将其topXProperty绑定到可拖动窗格:
StringConverter<Number> converter = new NumberStringConverter();
Bindings.bindBidirectional(topXProperty, dragPane.xProperty, converter);
最后,可拖动窗格包含:
public DoubleProperty xProperty = new SimpleDoubleProperty();
使用链接到窗格layoutX的属性的相应getter和setter。
所以我有这个双向绑定的大链TextField&lt; - &gt;型号&lt; - &gt;可拖动的窗格&lt; - &gt; pane.layoutXProperty
在拖动窗格时可以正常工作,但是一旦文本字段被更改,我就会得到:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: Bidirectional binding failed, setting to the previous value
堆栈跟踪中的任何内容都没有指向我的消息来源,并且“隐藏”消息“绑定失败”,我抓着吸管。有什么建议?我也愿意接受更好的实施,因为我怀疑我的方法也可能不正确。