Браузер JavaFX - отображение getTitle() записи в ListView

Мне нужно добавить функцию отображения истории в мой веб-браузер JavaFX. У меня есть: метод получения истории как ObservableList:

public static ObservableList<Entry> getHistoryList() {
    WebHistory history = MyJavaFXBrowser.getWebEngine().getHistory();
    ObservableList<Entry> entries = history.getEntries();
    return entries; 
}

и преобразовать в ListView

public static ListView<Entry> getHistoryPane() {
    return new ListView<Entry>(getHistoryList());
}

Как я могу отображать только Entry.getTitle() - не полную информацию. введите здесь описание изображения

Если я изменю свой метод на это:

public static ObservableList<String> getHistoryListTitles(){
        WebHistory history = MyJavaFXBrowser.getWebEngine().getHistory();
        ObservableList<Entry> entries = history.getEntries();
        ObservableList<String> titles = FXCollections.observableArrayList();;
        for (Entry entry: entries) {
            titles.add(entry.getTitle());
        }

        return titles;
    }

он не обновляет историю, когда я автоматически меняю страницу.

Как я могу получить доступ к методу ObservableList в ListView?


person Pavel    schedule 28.12.2017    source источник


Ответы (1)


Используйте клеточную фабрику:

public static ListView<Entry> getHistoryPane() {
    ListView<Entry> historyPane = new ListView<Entry>(getHistoryList());

    historyPane.setCellFactory(lv -> new ListCell<Entry>() {
        @Override
        protected void updateItem(Entry entry, boolean empty) {
            super.updateItem(entry, empty);
            setText(entry == null ? null : entry.getTitle());
        }
    });

    return historyPane ;
}
person James_D    schedule 28.12.2017