Javafx单选按钮定向绑定
我还是javafx新手,我想对单选按钮执行定向绑定 在我的fxml中,我有Javafx单选按钮定向绑定,java,javafx,Java,Javafx,我还是javafx新手,我想对单选按钮执行定向绑定 在我的fxml中,我有 <fx:define> <ToggleGroup fx:id="version_selection" /> </fx:define> <RadioButton toggleGroup="$version_selection" ............> <RadioButton toggleG
<fx:define>
<ToggleGroup fx:id="version_selection" />
</fx:define>
<RadioButton toggleGroup="$version_selection" ............>
<RadioButton toggleGroup="$version_selection" ............>
其中,模型是具有SimpleStringValue属性的my类
如何绑定togglegroup,因为它没有textproperty作为textfield即使模型中有
ObjectProperty
,也无法建立双向绑定,因为togglegroup.selectedToggle
是只读的。您需要通过向切换组添加侦听器来解决此问题。selectedToggle
属性和model属性,并在更改上更新除更改源之外的属性
使用映射
将文本转换为要选择的切换。以下示例使用TextField
来确定属性,而不是使用模型属性来演示行为:输入要选择的单选按钮的文本,然后将其选中
@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();
}
@覆盖
公共无效开始(阶段primaryStage)引发IOException{
ToggleGroup=新的ToggleGroup();
VBox VBox=新的VBox();
对于(char c='a';c即使您的模型中有一个ObjectProperty
,也无法建立双向绑定,因为ToggleGroup.selectedToggle
是只读的。您需要通过向ToggleGroup.selectedToggle
属性和model属性添加一个侦听器来解决这个问题,并更新属性而不是变更的来源
使用映射
将文本转换为要选择的切换。以下示例使用文本字段
来确定属性,而不是使用模型属性来演示行为:输入要选择的单选按钮的文本,然后将其选中
@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();
}
@覆盖
公共无效开始(阶段primaryStage)引发IOException{
ToggleGroup=新的ToggleGroup();
VBox VBox=新的VBox();
对于(char c='a';c在定向绑定中,我需要用户选择单选按钮,并且在其他情况下,例如在更新期间,有一个预选单选按钮。因此,定向绑定中的两个方向,我需要用户选择单选按钮,并且在其他情况下,例如在更新期间,有一个预选单选按钮。因此方向