简体   繁体   中英

FXML ListView, I can't add my ObservableArrayList<Pane> to it

I'm writing a messenger in Java and FXML and I want to show all the current chats of the user on a ListView (chatBar). My chats are in an ObservableArrayList but I still can't add the values to the 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);
}

I get no error messages or exceptions. It just won't show.

the problem is that you misunderstood the usage of ListView ;)

The items that are stored in a ListView are no cell-views but models. Internally the ListView creates cells that represents the model items and shows them on screen. You can try this by simply creating a ListView<String> and add a list of Strings to the items. You will see labels that shows the String values omg the screen. For such basic datatypes like String your ListView automatically creates cell-views to hat makes sense. For more complexe model types (like a list of custom models) you need to write your own cell-view factory (or overwrite toString() in your model class). See this tutorial as a first example to work with Strings. A more complexe example can be found here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM