2017-03-03 48 views
0
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是给误差 “如何使超链接的TableColumn在TableView中编辑

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列editable..but需要注意的是超..

回答

0

快速和肮脏的方式是为TextFieldTableCell指定stringConverter

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以及在编辑模式下显示HyperlinkTableCell以及处于编辑模式时的TextField会更好。

+0

感谢您的回答..您可以举一个如何实现一个tablecell的例子,当不处于编辑模式时显示超链接,并且在编辑模式下显示文本框? – Pooja

相关问题