2012-06-06 30 views
6

我一直在尋找關於將數據刷新到tableview的信息。我試圖直接修改模型,但我得到一個錯誤。我修改模型,但表不刷新,只有當我移動一列時,表格才顯示修改後的值。從模型中自動更新TableView中的行

要告訴你一個例子(13-6)我把教程:

http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJABIEED

我修改它包括一個按鈕,並在其行動:

Button button = new Button("Modify"); 
button.setOnAction(new EventHandler<ActionEvent>() { 
@Override 
public void handle(ActionEvent arg0) { 
    String name = table.getItems().get(0).getFirstName(); 
    name = name + "aaaa"; 
    table.getItems().get(0).setFirstName(name); 
    } 
}); 

final VBox vbox = new VBox(); 
vbox.setSpacing(5); 
vbox.getChildren().addAll(label, table, button); 
vbox.setPadding(new Insets(10, 0, 0, 10)); 

我猜這是tableview中的一個bug,但是有沒有機會解決這個問題?

謝謝!

回答

21

使TableView能夠跟蹤數據更改,您需要將相關字段公開爲JavaFX屬性。接下來的方法添加到Person類從教程:

public SimpleStringProperty firstNameProperty() { 
     return firstName; 
    } 

    public SimpleStringProperty lastNameProperty() { 
     return lastName; 
    } 

    public SimpleStringProperty emailProperty() { 
     return email; 
    } 
+2

這只是工作。這正是我正在尋找的。謝謝! –

+1

太棒了!我想它適用於反射,所以重要的是屬性獲得者有正確的名字[屬性] Property()。在我的情況下,我得到[屬性] Property(),所以它沒有更新。謝謝! –

3

有一個在TableView中更新(https://javafx-jira.kenai.com/browse/RT-22463)的錯誤。我有類似的問題,並經過一些搜索這是我的解決方法。我發現如果列被刪除,然後重新添加表更新。用法

public static <T,U> void refreshTableView(TableView<T> tableView, List<TableColumn<T,U>> columns, List<T> rows) {   
    tableView.getColumns().clear(); 
    tableView.getColumns().addAll(columns); 

    ObservableList<T> list = FXCollections.observableArrayList(rows); 
    tableView.setItems(list); 
} 


例子:

refreshTableView(myTableView, Arrays.asList(col1, col2, col3), rows);