TableColumn<ComponentObject, Hyperlink> template_id = new TableColumn<ComponentObject, Hyperlink>("Template Id");
template_id.setCellValueFactory(
new PropertyValueFactory<ComponentObject, Hyperlink>("template"));
template_id.setCellFactory(TextFieldTableCell.forTableColumn());
template_id.setOnEditCommit(
new EventHandler<CellEditEvent<ComponentObject, Hyperlink>>() {
@Override
public void handle(CellEditEvent<ComponentObject, Hyperlink> t) {
((ComponentObject) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setTemplate((javafx.scene.control.Hyperlink) t.getNewValue());
}
}
);
这里setCellFactory给出了错误 “
The method setCellFactory(Callback<TableColumn<ComponentObject,Hyperlink>,TableCell<ComponentObject,Hyperlink>>) in
the type TableColumn<ComponentObject,Hyperlink> is not applicable for the arguments
(Callback<TableColumn<Object,String>,TableCell<Object,String>>)
“
如何解决这个问题?我想使template_id列可编辑..但请注意它是超链接..
答案 0 :(得分:0)
快速而肮脏的方法是为stringConverter
指定TextFieldTableCell
:
StringConverter<Hyperlink> converter = new StringConverter<Hyperlink>() {
@Override
public Hyperlink fromString(String string) {
return new Hyperlink(string);
}
@Override
public String toString(Hyperlink hyperlink) {
return hyperlink.getText();
}
}
template_id.setCellFactory(TextFieldTableCell.forTableColumn(converter));
但是,一般情况下,使用UI节点表示数据是一个非常糟糕的主意,这是通过使列类型为Hyperlink
来实现的。这里可能会发生奇怪的事情。最好是设置数据类型String
,并在不处于编辑模式时实现自己的TableCell
,而在编辑模式下显示Hyperlink