2017-03-03 3 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()); 
      } 
     } 
    ); 

Hier machen setCellFactory Fehler als "Wie Hyperlink Table in Tableview editierbar

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>>) 

"

Wie geben, diese zu lösen? Ich möchte template_id Spalte editable..but Notiz machen, dass es Hyperlink ist ..

Antwort

0

Die schnelle und schmutzige Art und Weise ist eine stringConverter für die TextFieldTableCell angeben:

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)); 

Im Allgemeinen ist es aber ein sehr schlechte Idee, Ihre Daten mit UI-Knoten zu repräsentieren, was Sie tun, indem Sie den Spaltentyp Hyperlink machen. Seltsame Dinge können hier passieren. Es wäre besser, den Datentyp String zu erstellen und Ihre eigene TableCell zu implementieren, die eine Hyperlink zeigte, wenn nicht im Bearbeitungsmodus und eine TextField im Bearbeitungsmodus.

+0

Vielen Dank für Ihre Antwort. Können Sie ein Beispiel für die Implementierung einer Tabellenzelle geben, die einen Hyperlink anzeigt, wenn sie sich nicht im Bearbeitungsmodus befindet und ein Textfeld im Bearbeitungsmodus? – Pooja