FXML ListView, я не могу добавить свой ObservableArrayList <Pane>к нему - PullRequest
0 голосов
/ 22 мая 2019

Я пишу мессенджер на Java и FXML и хочу показать все текущие чаты пользователя на ListView (chatBar).Мои чаты находятся в ObservableArrayList, но я все еще не могу добавить значения в ListView.

public void fillChatBar() {
    ArrayList<Chat> chats = db.getAllInvolvedChats(user.getUserID());

    ObservableList<Pane> chatHolder = FXCollections.observableArrayList();

    chats.forEach(chat -> {
        Pane chatPane = new Pane();
        Label chatName = new Label();
        chatName.setText(chat.getOpponent(user.getUserID()).getUsername());
        chatPane.getChildren().add(chatName);
        chatPane.getChildren().add(new ImageView(chat.getOpponent(user.getUserID()).getProfileImage()));

        chatHolder.add(chatPane);
    });

    chatBar.setItems(chatHolder);
}

Я не получаю сообщений об ошибках или исключений.Это просто не будет отображаться.

1 Ответ

0 голосов
/ 23 мая 2019

проблема в том, что вы неправильно поняли использование ListView;)

items, которые хранятся в ListView, это не cell-views, а модели. Внутренне ListView создает ячейки, которые представляют элементы модели и показывают их на экране. Вы можете попробовать это, просто создав ListView<String> и добавив список строк к элементам. Вы увидите метки, которые показывают значения String на экране. Для таких базовых типов данных, как String, ваш ListView автоматически создает представления ячеек, чтобы иметь смысл. Для более сложных типов моделей (таких как список пользовательских моделей) вам необходимо написать собственную фабрику представлений ячеек (или переписать toString() в вашем классе моделей). См. этот урок в качестве первого примера работы со строками. Более сложный пример можно найти здесь .

...