Где эквивалент setConverter в элементе управления ListView, как элемент управления ComBox? - PullRequest
0 голосов
/ 05 января 2019

Элемент управления ComboBox имеет метод setConverter, см. JavaFX ComboBox - отображать текст, но возвращать идентификатор при выборе для примера. Я пытаюсь адаптировать принятый ответ на этот вопрос для работы с элементом управления ListView. Я не вижу метода setConverter для класса ListView ни в одной документации.

@FXML   private ListView<RowlvPqAttributes>  lvPqAttributes;
//...
    class RowlvPqAttributes {
        private String ID;
        private String text;
        public RowlvPqAttributes(String ID, String text) {
            setID(ID);
            setText(text);
        }
        public String getID() {
            return ID;
        }
        public void setID(String iD) {
            ID = iD;
        }
        public String getText() {
            return text;
        }
        public void setText(String text) {
            this.text = text;
        }
    }
    private void initlvPqAttributes() {
        lvPqAttributes.setConverter(new StringConverter<RowlvPqAttributes>() {
            @Override
            public String toString(RowlvPqAttributes object) {
                return object.getText();
            }

            @Override
            public RowlvPqAttributes fromString(String string) {
                return lvPqAttributes.getItems().stream().filter(ap -> 
                    ap.getText().equals(string)).findFirst().orElse(null);
            }   
        });

Here is the compile error I get

Если я приму предложенное исправление, это не поможет:

1 Ответ

0 голосов
/ 05 января 2019

Они не работают одинаково, для ListView вы настраиваете дисплей, используя setCellFactory метод

lvPqAttributes.setCellFactory(lv -> new ListCell<RowlvPqAttributes>() {
    @Override
    public void updateItem(RowlvPqAttributes row, boolean empty) {
        super.updateItem(row, empty) ;
        setText(empty ? null : row.getText());
    }
}

Для получения данных из выбранного элемента:

RowlvPqAttributes selected = lvPqAttributes.getSelectionModel().getSelectedItem();
String selectedID = selected.getID();
String selectedText = selected.getText();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...