我有以下代码用于编辑ListView中的单元格:
listView.setCellFactory(new Callback<ListView<TextModule>, ListCell<TextModule>>() {
@Override public ListCell<TextModule> call(ListView<TextModule> param) {
TextFieldListCell<TextModule> textCell = new TextFieldListCell<TextModule>() {
@Override public void updateItem(TextModule item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText( item.getSummary());
}
else {
setText(null);
}
}
};
return textCell;
}
});
现在的问题是,如果我双击输入
ListView
中的任何单元格,就可以编辑该单元格,但是属性(显示的文本)将更改为类定义,如com.test.tools.tbm.model.TextModule@179326d
。通常,它会显示诸如“ Hello World”之类的文本。 最佳答案
如果没有为TextFieldListCell
提供适当的字符串转换器,它将使用默认实现(来自CellUtils
):
private static <T> String getItemText(Cell<T> cell, StringConverter<T> converter) {
return cell.getItem().toString();
}
在您的情况下显示为
com.test.tools.tbm.model.TextModule@179326d
,因为cell.getItem()
返回TextModule
的实例。因此,您需要在
toString()
类中覆盖TextModule
。class TextModule {
private final String summary;
public TextModule(String summary){
this.summary=summary;
}
public String getSummary(){ return summary; }
@Override
public String toString(){
return summary;
}
}
或者,您也可以提供自己的
StringConverter
: listView.setCellFactory(TextFieldListCell.forListView(new StringConverter<TextModule>(){
@Override
public String toString(TextModule item) {
return item.getSummary();
}
@Override
public TextModule fromString(String string) {
return new TextModule(string);
}
}));