Java JfxListView的自定义单元格工厂返回原始对象

Java JfxListView的自定义单元格工厂返回原始对象,java,javafx,custom-cell,openjfx,Java,Javafx,Custom Cell,Openjfx,因此,我的自定义单元格工厂应该从消息对象返回两个字段,而不是在列表视图中获取原始对象 有一个代码负责格式化两个文本对象,该对象从消息对象中的字段获取值 messageJFXListView.setCellFactory(new Callback<ListView<Message>, ListCell<Message>>() { @Override public ListCell<Message>

因此,我的自定义单元格工厂应该从
消息
对象返回两个字段,而不是在
列表视图
中获取原始对象

有一个代码负责格式化两个
文本
对象,该对象从
消息
对象中的字段获取值

   messageJFXListView.setCellFactory(new Callback<ListView<Message>, ListCell<Message>>() {
            @Override
            public ListCell<Message> call(ListView<Message> param) {
                return new JFXListCell<Message>(){
                    @Override
                    public void updateItem(Message item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty || item == null || item.getMessage() == null) {
                            setText(null);
                        } else if(item.getNickname() == null) {
                            setText(item.getMessage()); // no formatting here yet
                        }
                        else{
                            Text nickname = new Text();
                            nickname.setStyle("-fx-fill: #424242;-fx-font-weight:bold;");
                            nickname.setText("<" + item.getNickname() + "> ");
                            Text message = new Text();
                            message.setText(item.getMessage());
                            getChildren().addAll(nickname,message);
                        }
                    }
                };
            }
        });
    }

这是JFoenix中的一个bug,似乎
setText(null)
是处理它的唯一方法,直到他们将其修复为止。。请遵守java命名约定!。。并且不要在每次updateItem调用中创建新节点
public class Message {
    private String nickname;
    private String message;

    public String getNickname() {
        return nickname;
    }

    public Message(String nickname, String message) {
        this.nickname = nickname;
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
    public Message() {
    }
    public Message(String message) {
        this.message = message;
    }
    
}

public class MainWindowController   {
    @FXML
    public ObservableList<Message> messageObservableList = FXCollections.observableArrayList();
    @FXML
    public JFXListView<Message> messageJFXListView;
}