在javafx中双向绑定ToggleGroup

前端之家收集整理的这篇文章主要介绍了在javafx中双向绑定ToggleGroup前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下,有一个定义鼠标模式的枚举:
public enum MouseMode {
SELECTION,EDITING,DELETING }

想象一下,有一个由3个按钮组成的切换组:

ToggleButton selection = new ToggleButton("Select");
    ToggleButton editing = new ToggleButton("Edit");
    ToggleButton deleting = new ToggleButton("Delete");
    ToggleGroup mouseSelection = new ToggleGroup();

我希望一个字段MouseMode currentMode双向链接到toggle-group.每当设置切换时,相应地切换currentMode,但是如果某个外部进程改变currentMode(可能是按键),则切换组也会相应地进行调整.

我可以用2个监听器做到这一点,但我想知道是否有办法创建自定义双向映射.

解决方法

我认为没有办法直接这样做.虽然是通用的
Bindings.bindBidirectional(Property<S> property1,Property<T> property2,Function<S,T> mapping,Function<T,S> inverseMapping)

可能是API的一个很好的补充,即使在这种情况下也没有用,因为ToggleGroup的selectedProperty是只读的(因为选择需要在调用每个Toggle的setSelected(…)方法时处理,以及ToggleGroup的selectedProperty).

在这种情况下,使用几个听众是可行的方法.

最接近“自定义双向映射”的是

Bindings.bindBiDirectional(StringProperty stringProperty,ObjectProperty<T> otherProperty,StringConverter<T> converter)

方法.在你有(可写)ObjectProperty< S>的情况下和(可写的)ObjectProperty< T>理论上,您可以使用两个双向绑定和一个中间StringProperty将它们绑定在一起.在实践中,这几乎总是比仅使用两个侦听器更多的代码,并且效率也较低.

猜你在找的Java相关文章