JavaFX ListView // Радио кнопка setSelected () не работает - PullRequest
0 голосов
/ 31 мая 2018

Heyall, я работаю над этой формой, у которой есть вид сверху и текстовые поля с атрибутами объектов списка под ним.Я реализовал слушателей так, что если вы нажмете на один из объектов в списке, они заполнят соответствующие данные.Это работает для каждого текстового поля, и для моего ползунка возраста тоже.Но я борюсь с переключателями.

У меня они есть в моем контроллере:

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

И, конечно, у моего личного класса есть метод getGeschlecht, который возвращает гендерную строку.Должен ли мой блок равных, если работать правильно тогда?Я искал несколько часов, и я просто не могу понять, в чем проблема.

1 Ответ

0 голосов
/ 01 июня 2018

ListView выбор элементов не вызывает ActionEvents.Это означает, что если вы не используете слушателя для вызова clickList, он не вызывается при изменении выбора ячейки.Другие изменения применяются вашими слушателями.

Вы также должны установить свойство selected для слушателя.Также я рекомендую использовать для этой цели одного слушателя:

initialize method

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