首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaFX列表视图//单选按钮setSelected()不工作

JavaFX列表视图//单选按钮setSelected()不工作
EN

Stack Overflow用户
提问于 2018-06-01 02:36:33
回答 1查看 238关注 0票数 0

Heyall,我正在处理这个表单,顶部有一个列表视图,下面有列表对象的属性的文本字段。我实现了监听器,这样当你点击列表中的一个对象时,它们的表单就会填入相应的数据。这适用于每个文本字段,也适用于我的年龄滑块。但是我正在为单选按钮而苦苦挣扎。

我在我的控制器里有这样的代码:

代码语言:javascript
复制
@FXML
private RadioButton rb_m;

@FXML
private ToggleGroup geschlechtGroup;

@FXML
private RadioButton rb_w;

这是我的OnClickList事件:

代码语言:javascript
复制
@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的问题。

下面是我的清单:

代码语言:javascript
复制
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类有getGeschlecht方法,它返回性别字符串。我的equal if块不是应该正常工作吗?我已经找了好几个小时了,就是搞不懂问题出在哪里。

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 07:29:39

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

您还应该从侦听器中设置selected属性。此外,我还建议使用单个监听程序来实现此目的:

initialize方法

代码语言:javascript
复制
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);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档