FXML ListView,我无法向其添加ObservableArrayList <pane>

时间:2019-05-22 15:04:30

标签: java javafx fxml

我正在用Java和FXML编写Messenger,我想在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 :(得分:0)

问题是您误解了do_outOfMemory_specific_stuff的用法;)

存储在ListView中的items不是ListView,而是模型。在cell-views内部创建代表模型项目的单元格并在屏幕上显示它们。您可以通过简单地创建ListView并将其添加为字符串列表来尝试。您将在屏幕上看到显示ListView<String>值的标签。对于像String这样的基本数据类型,您的String自动创建有意义的单元格视图。对于更复杂的模型类型(例如自定义模型列表),您需要编写自己的单元格视图工厂(或在模型类中覆盖ListView)。请参阅this tutorial作为使用字符串的第一个示例。可以找到更复杂的示例here