I use tableview for my project. As I have long text to put into the cells, I need to wrap it but I also need to edit cells.
So, I have this code.
tcHelp.setCellValueFactory(new PropertyValueFactory<Help, String>("Description"));
tcHelp.setCellFactory(TextFieldTableCell.forTableColumn());
tcHelp.setCellFactory(new Callback<TableColumn<Help, String>, TableCell<Help, String>>() {
@Override
public TableCell<Help, String> call(TableColumn<Help, String> param) {
final TableCell<Help, String> cell = new TableCell<Help, String>() {
private Text text;
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (!isEmpty()) {
Help rowItem = getTableRow().getItem();
text = new Text(rowItem.getDescription());
text.setWrappingWidth(440);
setGraphic(text);
}
}
};
//Don't work!!
cell.setEditable(true);
return cell;
}
});
I have a problem to edit the cells. What's wrong with cell.setEditable(true) ?
edit : According to trashgod advice, i wrote that but I can't save the value edited. What's wrong with this code ?
tcHelp.setCellFactory(new Callback<TableColumn<Help, String>, TableCell<Help, String>>() {
@Override
public TableCell<Help, String> call(TableColumn<Help, String> param) {
final TableCell<Help, String> cell = new TableCell<Help, String>() {
private TextArea textArea;
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (!isEmpty()) {
Help rowItem = getTableRow().getItem();
String text= rowItem.getDescription();
Text t = new Text(text);
textArea = new TextArea(text);
textArea.setWrapText(true);
double height = t.getLayoutBounds().getHeight();
textArea.setPrefHeight(height+10);
setGraphic(textArea);
}
}
};
cell.setEditable(true);
return cell;
}
});
setOnEditCommit is never called with textarea in my example !!
tcHelp.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Help, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Help, String> t) {
// TODO Auto-generated method stub
((Help) t.getTableView().getItems().get(t.getTablePosition().getRow())).setDescription(t.getNewValue());
});