Java 编辑TextFieldListCell时,将显示相应的类
我有以下代码用于编辑ListView中的单元格:Java 编辑TextFieldListCell时,将显示相应的类,java,listview,javafx,Java,Listview,Javafx,我有以下代码用于编辑ListView中的单元格: listView.setCellFactory(new Callback<ListView<TextModule>, ListCell<TextModule>>() { @Override public ListCell<TextModule> call(ListView<TextModule> param) { TextFieldListCell<TextModule
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.setCellFactory(新回调(){
@覆盖公共ListCell调用(ListView参数){
TextFieldListCell textCell=新TextFieldListCell(){
@重写公共void updateItem(TextModule项,布尔空){
super.updateItem(项,空);
如果(项!=null){
setText(item.getSummary());
}
否则{
setText(空);
}
}
};
返回文本单元格;
}
});
现在的问题是,如果我通过双击在
列表视图中输入任何单元格,我可以编辑该单元格,但属性(显示的文本)会更改为类定义,如com.test.tools.tbm.model。TextModule@179326d
。通常,它会显示“Hello World”等文本。如果您没有为TextFieldListCell
提供合适的字符串转换器,它将使用默认实现(从CellUtils
):
或者,您也可以提供自己的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);
}
}));
listView.setCellFactory(TextFieldListCell.forListView(新的StringConverter()){
@凌驾
公共字符串到字符串(TextModule项){
return item.getSummary();
}
@凌驾
公共文本模块fromString(字符串){
返回新的文本模块(字符串);
}
}));
class TextModule {
private final String summary;
public TextModule(String summary){
this.summary=summary;
}
public String getSummary(){ return summary; }
@Override
public String toString(){
return summary;
}
}
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);
}
}));