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