Javafx tableview编辑方法不能调用cellfactory

时间:2016-04-15 05:39:44

标签: javafx tableview edit tablecell

我尝试在运行程序中设置编辑单元格。设置表可编辑,cellfactory和其他。 当用鼠标点击时,我可以编辑单元格。但是edit()的调用TableView方法不会创建文本字段。

我错过了什么?

public class Main extends Application {

    TableView <TestClass> tableView;
    TableColumn <TestClass, String>  stringColumn;
    TableColumn <TestClass, String> editColumn;
    ObservableList<TestClass> items;

    @Override
    public void start(Stage primaryStage) throws Exception{
        makeTestData();

        tableView = new TableView();
        tableView.setEditable(true);
        stringColumn = new TableColumn<>("Col1");
        editColumn = new TableColumn<>("Col2");
        tableView.getColumns().addAll(stringColumn, editColumn);
        stringColumn.setCellValueFactory(cell -> cell.getValue().stringProperty());
        editColumn.setCellValueFactory(cell -> cell.getValue().editProperty());
        editColumn.setCellFactory(TextFieldTableCell.<TestClass>forTableColumn());
        tableView.setItems(items);

        tableView.getSelectionModel().select(1);
        tableView.getSelectionModel().focus(1);
        tableView.edit(1, editColumn);  // !!! not create textfield ???

        BorderPane pane = new BorderPane();
        pane.setCenter(tableView);
        primaryStage.setScene(new Scene(pane));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }

    public void makeTestData(){
        items = FXCollections.observableArrayList(
                new TestClass("str1", "edit1"),
                new TestClass("str2", "edit2"),
                new TestClass("str3", "edit3")
        );
    }

    public class TestClass{
        StringProperty string = new SimpleStringProperty();
        StringProperty edit = new SimpleStringProperty();

        public TestClass() {}
        public TestClass(String string, String edit) {
            this.string = new SimpleStringProperty(string);
            this.edit = new SimpleStringProperty(edit);
        }
        public String getString() { return string.get();}
        public StringProperty stringProperty() { return string; }
        public void setString(String string) { this.string.set(string);}
        public String getEdit() { return edit.get();}
        public StringProperty editProperty() { return edit;}
        public void setEdit(String edit) { this.edit.set(edit);}
    }
}

1 个答案:

答案 0 :(得分:0)

是的我也遇到了这个问题。我解决它的方法是将edit方法调用放在另一个fx线程中。

QTabWidget