FXML ListView, я не могу добавить к нему свой ObservableArrayList<Pane>

Я пишу мессенджер на 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);
}

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

Вероятно, не очень хорошая идея иметь ObservableList из Pane.

Sedrick 22.05.2019 17:45

Я предполагаю, что вы должны использовать подход, аналогичный stackoverflow.com/questions/34838341/….

Sedrick 22.05.2019 17:49

Тем не менее это должно работать. Это означает, что проблема, по-видимому, связана с частью программы, которую вы не включили в вопрос. Вам нужно опубликовать минимальный воспроизводимый пример!

fabian 22.05.2019 17:57
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
3
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме