Kunlun:
Tengo este código:
public static void main(String[] ar){ launch(ar); }
@Override
public void start(Stage primaryStage){
TableView<Foo> tableView = new TableView<>();
tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
tableView.setPlaceholder(new Label("No data"));
tableView.setEditable(true);
TableColumn<Foo, String> colText = new TableColumn<>("Text");
colText.setCellValueFactory(new PropertyValueFactory<>("text"));
tableView.getColumns().add(colText);
List<Foo> listFoo = new ArrayList<>(Arrays.asList(new Foo("1"), new Foo("2"), new Foo("3")));
tableView.setItems(FXCollections.observableArrayList(listFoo));
primaryStage.setScene(new Scene(tableView));
primaryStage.show();
}
public class Foo{
private String text;
public Foo(String txt){ text = txt; }
public String getText(){ return text; }
public void setText(String text){ this.text = text; }
}
Trato de hacer que las células de la tabla editable: tableView.setEditable(true);
, pero no trabajo.
¿Cómo puedo hacer que las células de editable mesa o tener posibilidad de copiar el valor de la celda en el portapapeles.
Fabian :
Para una TableCell
para ser editadas, 3 condiciones deben cumplirse:
- El que contiene
TableView
es editable - El que contiene
TableColumn
es editable - La propia célula es editable
En su caso, la tercera condición no se cumple, ya que las células creadas por el valor por defecto cellFactory
no son editables. Es necesario asignar una cellFactory
que permite la edición. Además tenga en cuenta que a menos que las cellValueFactory
declaraciones de un objeto de aplicación WritableValue
, también es necesario utilizar el onEditCommit
controlador para almacenar los datos en el tema:
colText.setCellFactory(TextFieldTableCell.forTableColumn());
colText.setOnEditCommit(evt -> evt.getRowValue().setText(evt.getNewValue()));