JavaFX ListView//单选按钮setSelected()不工作

JavaFX ListView//单选按钮setSelected()不工作,listview,if-statement,javafx,selectionmodel,Listview,If Statement,Javafx,Selectionmodel,Heyall,我正在处理这个表单,它的顶部有一个listview,下面是带有列表对象属性的文本字段。我实现了监听器,这样,如果您单击列表中的一个对象,它们的表单将填充相应的数据。这适用于每个文本字段,也适用于我的年龄滑块。但是我在单选按钮上挣扎 我的控制器中有这样的装置: @FXML private RadioButton rb_m; @FXML private ToggleGroup geschlechtGroup; @FXML private RadioButton rb_w; 这是我

Heyall,我正在处理这个表单,它的顶部有一个listview,下面是带有列表对象属性的文本字段。我实现了监听器,这样,如果您单击列表中的一个对象,它们的表单将填充相应的数据。这适用于每个文本字段,也适用于我的年龄滑块。但是我在单选按钮上挣扎

我的控制器中有这样的装置:

@FXML
private RadioButton rb_m;

@FXML
private ToggleGroup geschlechtGroup;

@FXML
private RadioButton rb_w;
这是我的OnClickList事件:

@FXML
    void clickList(ActionEvent event)
    {



            if(list.getSelectionModel().getSelectedItem().getGeschlecht().equals("Weiblich"))
                    rb_w.setSelected(true);
            else
                    rb_m.setSelected(true);

                tf_vn.setText(list.getSelectionModel().getSelectedItem().getVorname());
                tf_nn.setText(list.getSelectionModel().getSelectedItem().getNachname());
                tf_strasse.setText(list.getSelectionModel().getSelectedItem().getStrasse());
                tf_plz.setText(list.getSelectionModel().getSelectedItem().getPlz());
                tf_ort.setText(list.getSelectionModel().getSelectedItem().getWohnort());
                label_age.setText(list.getSelectionModel().getSelectedItem().getAlter() + " ");
    }
由于文本字段已填充,clickList事件本身似乎工作正常。真正让我困惑的是为什么单选按钮不起作用。问题一定出在if/else then上

以下是我的清单:

ObservableList<Person> items = FXCollections.observableArrayList();
    list.setItems(items);
    items.add(new Person("Eva", "Becker", "Lorenzstrasse 20", "95028",
            "Hof", "Weiblich", 44));
    items.add(new Person("Max", "Schmitt", "Testallee 5", "81245",
            "München", "Maennlich", 24));

    list.getSelectionModel().selectedItemProperty().addListener((v,oldValue, newValue) -> tf_vn.setText(newValue.getVorname()));
    list.getSelectionModel().selectedItemProperty().addListener((v,oldValue, newValue) -> tf_nn.setText(newValue.getNachname()));
    list.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) -> tf_strasse.setText(newValue.getStrasse()));
    list.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) -> tf_plz.setText(newValue.getPlz()));
    list.getSelectionModel().selectedItemProperty().addListener((v,oldValue, newValue) -> tf_ort.setText(newValue.getWohnort()));
    list.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) -> label_age.setText(" " + newValue.getAlter()));
    list.getSelectionModel().selectedItemProperty().addListener((v,oldValue, newValue) -> sliderAge.setValue(newValue.getAlter()));
observeList items=FXCollections.observearraylist();
列表。设置项目(项目);
添加(新人物(“伊娃”、“贝克尔”、“洛伦兹塔斯20”、“95028”),
“Hof”、“Weiblich”,44);
添加(新人物(“Max”、“Schmitt”、“Testallee 5”、“81245”),
“门钦”、“马恩利希”,24);
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->tf_vn.setText(newValue.getVorname());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->tf_nn.setText(newValue.getNachname());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->tf_strasse.setText(newValue.getStrasse());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->tf_plz.setText(newValue.getPlz());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->tf_ort.setText(newValue.getWohnort());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->label_age.setText(“+newValue.getAlter());
list.getSelectionModel().SelectEditeProperty().addListener((v,oldValue,newValue)->sliderAge.setValue(newValue.getAlter());

当然,我的person类有getGeschlecht方法,它返回性别字符串。如果我的同位语块不能正常工作的话?我已经找了好几个小时了,我就是搞不懂有什么问题

ListView
项目选择不会触发
ActionEvents
。这意味着,除非您使用侦听器调用
单击列表
,否则当单元格选择更改时,不会调用该列表。其他更改由侦听器应用

您还应该从侦听器设置
selected
属性。我还建议为此使用单个侦听器:

初始化
方法
clickList()
是否被调用?列表所选的侦听器将填充文本字段,因此我猜该方法根本没有被调用。为什么不在列表的选择中选择带有侦听器的单选按钮,就像填充文本字段一样?
list.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) -> {
    tf_vn.setText(newValue.getVorname());
    tf_nn.setText(newValue.getNachname());
    tf_strasse.setText(newValue.getStrasse());
    tf_plz.setText(newValue.getPlz());
    tf_ort.setText(newValue.getWohnort());
    label_age.setText(" " + newValue.getAlter());
    sliderAge.setValue(newValue.getAlter());
    (newValue.getGeschlecht().equals("Weiblich") ? rb_w : rb_m).setSelected(true);
});