2016-04-15 7 views
0

実行プログラムでセルを編集しようとしました。編集可能なテーブル、セルファクトリーなどを設定します。 マウスをクリックすると、セルを編集できます。しかしTableViewedit()メソッドを呼び出すと、Textfieldは作成されません。Javafxテーブルビューの編集メソッドがcellfactoryを呼び出さない

私は何が欠けていますか?

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);} 
    } 
} 
+0

再生できません。編集欄の項目をダブルクリックすると、テキストフィールドが表示されます。 – fabian

+0

が確認されました。同様の設定を使用して、tableview.edit(行、列)を呼び出すと、編集可能なテキストフィールドを呼び出すことができませんでした。 –

答えて

0

はいこの問題も発生します。私はそれを解決する方法は、別のfxスレッドの中で編集メソッド呼び出しを置くことです。

Platform.runLater(() -> { 
    tableView.edit(row, editColumn); 
}); 
関連する問題