JavaFX TableView editable(true)不起作用

时间:2019-05-28 13:40:35

标签: java javafx

我有此代码:

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);,但是它不起作用。

如何使表格的单元格可编辑,或者可以将值从单元格复制到剪贴板。

1 个答案:

答案 0 :(得分:8)

要使TableCell可编辑,需要满足3个条件:

  1. 包含的TableView是可编辑的
  2. 包含的TableColumn是可编辑的
  3. 单元格本身是可编辑的

在您的情况下,第三个条件不满足,因为默认cellFactory创建的单元格不可编辑。您需要分配一个允许编辑的cellFactory。此外请注意,除非cellValueFactory返回实现WritableValue的对象,否则您还需要使用onEditCommit处理程序将数据存储在项目中:

colText.setCellFactory(TextFieldTableCell.forTableColumn());
colText.setOnEditCommit(evt -> evt.getRowValue().setText(evt.getNewValue()));