JavaFX ListView//Radio Button setSelected() 不起作用



嘿,我正在处理这个表单,该表单顶部有一个列表视图,其下方带有列表对象属性的文本字段。我实现了侦听器,以便如果您单击列表中的某个对象,它们表单将填充相应的数据。这适用于每个文本字段,也适用于我的年龄滑块。但我在为单选按钮而苦苦挣扎。

我的控制器中有这样的它们:

@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() + " ");
}

由于文本已填充,因此单击列表事件本身似乎工作正常。真正让我感到困惑的是为什么单选按钮无法检查。问题一定出在 if/else 那么。

这是我的清单:

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()));

当然,我的 person 类有返回 gender String 的方法 getGeschlecht。那么,如果块正常工作,我的平等不应该吗?我已经找了几个小时了,我只是无法理解问题所在。

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

还应从侦听器设置selected属性。此外,我建议为此目的使用单个侦听器:

initialize方法

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);
});

相关内容

最新更新