我有此代码:
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; }
}
我尝试使表格的单元格可编辑:tableView.setEditable(true);
,但是它不起作用。
如何使表格的单元格可编辑,或者可以将值从单元格复制到剪贴板。
答案 0 :(得分:8)
要使TableCell
可编辑,需要满足3个条件:
TableView
是可编辑的TableColumn
是可编辑的在您的情况下,第三个条件不满足,因为默认cellFactory
创建的单元格不可编辑。您需要分配一个允许编辑的cellFactory
。此外请注意,除非cellValueFactory
返回实现WritableValue
的对象,否则您还需要使用onEditCommit
处理程序将数据存储在项目中:
colText.setCellFactory(TextFieldTableCell.forTableColumn());
colText.setOnEditCommit(evt -> evt.getRowValue().setText(evt.getNewValue()));