gpt4 book ai didi

JavaFX ListView : Couldn't add a Label to ListCell

转载 作者:行者123 更新时间:2023-11-30 06:22:35 27 4
gpt4 key购买 nike

我正在使用 JavaFX 开发聊天应用程序。我有一个包含连接用户的 ListView 。每个单元格都由 UserView 对象表示:

public class UserView {

private Utilisateur user; //user
private String avatar;// user's avatar
private int numberofmessage = 0; //number of received messages.

public UserView(Utilisateur user, String avatar) {
this.user = user;
this.avatar = avatar;
}

public Utilisateur getUser() {
return user;
}

public void setUser(Utilisateur user) {
this.user = user;
}


public String getAvatar() {
return avatar;
}

public void setAvatar(String avatar) {
this.avatar = avatar;
}

public int getNumberofmessage() {
return numberofmessage;
}

public void setNumberofmessage(int numberofmessage) {
this.numberofmessage = numberofmessage;
}

public void InscrementMessages(int nbr){
this.numberofmessage +=nbr;
}


}

我想添加一个包含收到消息数的标签。这就是我所做的:

usersList.setCellFactory(new Callback<ListView<UserView>, ListCell<UserView>>() {
@Override
public ListCell<UserView> call(ListView<UserView> param) {
ListCell<UserView> cell = new ListCell<UserView>(){
@Override
protected void updateItem(UserView item, boolean empty) {
super.updateItem(item, empty);

if(!empty){

Image img = new Image("/images/"+item.getAvatar());
ImageView imageView = new ImageView(img);
imageView.setFitHeight(65);
imageView.setFitWidth(65);
setGraphic(imageView);
setText(item.getUser().getNom()+" "+item.getUser().getPrenom());

lblMsg = new Label();
if(item.getNumberofmessage() == 0){
lblMsg.setText("");
}
else{
lblMsg.setText(String.valueOf(item.getNumberofmessage()));
lblMsg.getStyleClass().clear();
lblMsg.getStyleClass().add("newMsg");
}

getChildren().add(lblMsg);
}
}

};
return cell;
}
});

出于测试目的,我将每个用户的消息数设置为 10:

for (Utilisateur user : users) {
if(!Helper.getInstance().getCurrentUser().equals(user)){
UserView uv = new UserView(user, "man.png");
uv.setNumberofmessage(10);
connectedUser.add(uv);
listConv.add(new UserConversation(uv));
}
}

这是结果:

enter image description here

最佳答案

您尝试使用 getChildren().add(lblMsg); 添加 Label,这不是 ListCell 的有效用法(或者其父级Labeled)。您想要显示的任何Node 都应设置为 graphicProperty在单元格中,如果要显示多个节点,可以设置一个容器节点(一个Parent)作为图形,并将节点添加到该父节点中。

了解这一点后,有几种可能的修复方法:

HBox root = new HBox(5);
root.getChildren().addAll(imageView, lblMsg);
setGraphic(root);

或者您可以将用户数量添加到文本中:

setText(item.getUser().getNom()+" "+item.getUser().getPrenom() + " " + item.getNumberofmessage());

这样 CSS 将会丢失 (lblMsg),因此也许根据您的需要,最好使用两个 Label:

HBox root = new HBox(5);
Label lblUserName = new Label(item.getUser().getNom()+" "+item.getUser().getPrenom());
root.getChildren().addAll(imageView, lblUserName, lblMsg);
setGraphic(root);

对于所有这些灵魂,您必须删除代码中的一些行,但这样做非常简单,因此我不会详细介绍这部分。

关于JavaFX ListView : Couldn't add a Label to ListCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823705/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com