在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将它们绑定在一起.在实践中,这几乎总是比仅使用两个侦听器更多的代码,并且效率也较低. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |