1 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超4個贊
即使ObjectProperty<Toggle>您的模型中有 a ,您也無法建立雙向綁定,因為ToggleGroup.selectedToggle它是只讀的。ToggleGroup.selectedToggle您需要通過向?qū)傩院湍P蛯傩蕴砑觽陕犉鱽斫鉀Q此問題,并在更改時更新更改源以外的屬性。
使用 aMap<String, Toggle>將文本轉(zhuǎn)換為要選擇的切換。以下示例使用 aTextField來確定屬性而不是模型屬性來演示行為:輸入RadioButton要選擇的文本,它將被選中。
@Override
public void start(Stage primaryStage) throws IOException {
ToggleGroup group = new ToggleGroup();
VBox vbox = new VBox();
for (char c = 'a'; c <= 'f'; c++) {
RadioButton radio = new RadioButton(Character.toString(c));
radio.setToggleGroup(group);
vbox.getChildren().add(radio);
}
TextField input = new TextField();
vbox.getChildren().add(input);
// create map mapping from text to corresponding toggle
Map<String, Toggle> map = new HashMap<>();
for (Toggle t : group.getToggles()) {
map.put(((RadioButton) t).getText(), t);
}
StringProperty property = input.textProperty();
InvalidationListener listener = new InvalidationListener() {
// flag preventing circular updating
boolean updating = false;
@Override
public void invalidated(Observable observable) {
if (!updating) {
updating = true;
if (observable == group.selectedToggleProperty()) {
// change as result of user interaction with RadioButton
// update property
RadioButton selectedToggle = (RadioButton) group.getSelectedToggle();
property.set(selectedToggle == null ? "" : selectedToggle.getText());
} else {
// change as result of updating the property
// select corresponding toggle
Toggle toggleToSelect = map.get(property.get());
group.selectToggle(toggleToSelect);
}
updating = false;
}
}
};
property.addListener(listener);
group.selectedToggleProperty().addListener(listener);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
添加回答
舉報