Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx单选按钮定向绑定_Java_Javafx - Fatal编程技术网

Javafx单选按钮定向绑定

Javafx单选按钮定向绑定,java,javafx,Java,Javafx,我还是javafx新手,我想对单选按钮执行定向绑定 在我的fxml中,我有 <fx:define> <ToggleGroup fx:id="version_selection" /> </fx:define> <RadioButton toggleGroup="$version_selection" ............> <RadioButton toggleG

我还是javafx新手,我想对单选按钮执行定向绑定

在我的fxml中,我有

  <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在定向绑定中,我需要用户选择单选按钮,并且在其他情况下,例如在更新期间,有一个预选单选按钮。因此,定向绑定中的两个方向,我需要用户选择单选按钮,并且在其他情况下,例如在更新期间,有一个预选单选按钮。因此方向