如何使TableView中的Hyperlink TableColumn可编辑

时间:2017-03-03 12:19:14

标签: javafx hyperlink tableview tablecolumn

 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列可编辑..但请注意它是超链接..

1 个答案:

答案 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