Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaFX:css样式中的listCell setCellFactory函数出现了任意错误_Css_Listview_Javafx_Auto Update - Fatal编程技术网

javaFX:css样式中的listCell setCellFactory函数出现了任意错误

javaFX:css样式中的listCell setCellFactory函数出现了任意错误,css,listview,javafx,auto-update,Css,Listview,Javafx,Auto Update,我正在使用javaFX构建一个服务器和客户端聊天应用程序。对于聊天界面,我想构建一个如下所示的聊天窗口: 如上图所示,双方(我和聊天的朋友)的第一次尝试非常顺利。然而,当他们继续聊天时,事情变得非常奇怪: 这是我的代码: chatListView.setCellFactory(lv -> { ListCell<String> cell = new ListCell<>(); Label label = new Label();

我正在使用javaFX构建一个服务器和客户端聊天应用程序。对于聊天界面,我想构建一个如下所示的聊天窗口:

如上图所示,双方(我和聊天的朋友)的第一次尝试非常顺利。然而,当他们继续聊天时,事情变得非常奇怪:

这是我的代码:

chatListView.setCellFactory(lv -> {
        ListCell<String> cell = new ListCell<>();
        Label label = new Label();
        cell.itemProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue != null) {
                System.out.println(oldValue+ " " + newValue);
                String name = newValue.split(":")[0].toLowerCase();
                if (name.equals(pmUser)) {
                    label.setStyle("-fx-background-color: aliceblue;");
                    cell.setAlignment(Pos.CENTER_RIGHT);
                }
                label.setText(newValue);
                cell.setGraphic(label);
            }
        });
        cell.emptyProperty().addListener((obs, wasEmpty, isEmpty) -> {
            if (isEmpty) {
                cell.setGraphic(null);
            }
        });
        cell.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        return cell;
    });
chatListView.setCellFactory(lv->{
ListCell=新ListCell();
标签=新标签();
cell.itemProperty().addListener((可观察、旧值、新值)->{
if(newValue!=null){
System.out.println(oldValue+“”+newValue);
字符串名称=newValue.split(“:”[0]。toLowerCase();
if(name.equals(pmUser)){
label.setStyle(“-fx背景色:aliceblue;”);
单元格设置对齐(位置居中\右侧);
}
label.setText(newValue);
单元格设置图形(标签);
}
});
cell.emptyProperty().addListener((obs,waspempty,isEmpty)->{
如果(我是空的){
cell.setGraphic(空);
}
});
cell.setContentDisplay(仅限ContentDisplay.GRAPHIC_);
返回单元;
});
正如您所看到的,每当一条消息属于朋友
name.equals(pmUser)
时,css就会发生变化。但情况似乎很奇怪,双方都只是第一次尝试才奏效。在那之后,一切都失去了控制。 早些时候,我使用了
updateItem(String项,boolean-emtpy)
函数,但它也遇到了同样的问题


如果有人能帮助我,我将不胜感激。

您需要为您的
if(name.equals(pmUser))
提供一个
else
子句,用于重置样式和对齐方式。重置的意思是我需要将其设置回默认值?但是我可以知道为什么单元格的样式会这样奇怪吗?更新:我确实尝试过:
else{label.setStyle(-fx背景色:浅黄色”);cell.setAlignment(Pos.CENTER_LEFT);}
,但它仍然不起作用,看起来很奇怪。您是否可以创建一个显示问题以及您的问题以将其包括在内的列表?显然不是你的整个项目,但足以让两个不同的用户在列表视图中添加字符串。哦,天哪,我刚刚发现了这一点。因为my
pmUser
变量分配错误。因为我太专注于
setCellFactory
,而忽略了这一点。非常抱歉,我提出了一个新问题。