2012-06-06 7 views
6

Odszukałem informacje o odświeżanie danych w tableview. Próbowałem modyfikować bezpośrednio model, ale dostałem błąd. Modyfikuję model, ale tabela nie jest odświeżana, tylko podczas przesuwania kolumny tabela pokazuje zmodyfikowane wartości.Autoupdating wiersze w TableView od modelu

Aby pokazać wam przykład (13-6) biorę samouczkiem:

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

A ja go zmodyfikować w tym przycisku i w swoim działaniu:

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)); 

myślę, że to błąd w widoku tabeli, ale czy jest jakaś szansa, aby to naprawić?

Dziękujemy!

Odpowiedz

21

, aby TableView mógł śledzić zmiany danych, których potrzebujesz, aby odsłonić odpowiednie pola jako właściwości JavaFX. Dodaj następujące metody Person klasy z samouczka:

public SimpleStringProperty firstNameProperty() { 
     return firstName; 
    } 

    public SimpleStringProperty lastNameProperty() { 
     return lastName; 
    } 

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

To po prostu działa. Tego właśnie szukałem. Dziękuję Ci! –

+1

Świetnie! Myślę, że działa z refleksją, więc ważne jest, aby właściwości pobierające miały poprawną nazwę [atrybut] Właściwość(). W moim przypadku dostałem atrybut [atrybut] Property(), więc nie był aktualizowany. Dzięki! –

3

Jest to błąd w aktualizacji Tableview (https://javafx-jira.kenai.com/browse/RT-22463). Miałem podobny problem i po pewnym wyszukiwaniu jest to moje obejście. Zauważyłem, że jeśli kolumny zostaną usunięte, a następnie ponownie dodane, tabela zostanie zaktualizowana.

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


Przykład użycia:

refreshTableView(myTableView, Arrays.asList(col1, col2, col3), rows); 
Powiązane problemy