2017-03-03 43 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

相關問題