listCell在javaFX中设置setCellFactory函数:css样式任意错误

时间:2016-11-28 11:29:40

标签: css listview javafx auto-update

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

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

enter image description here

以下是我的代码:

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;
    });

正如您所看到的,只要邮件属于朋友name.equals(pmUser),就会更改css。但情况似乎很奇怪,它只是双方的第一次尝试。在那之后,一切都失控了。 之前我使用过updateItem(String item, boolean emtpy)函数,但它也遇到了同样的问题。

感谢有人可以帮助我。

0 个答案:

没有答案