2012-06-06 11 views
6

Ich habe Informationen über das Aktualisieren von Daten in einer Tabellenansicht gesucht. Ich habe versucht, das Modell direkt zu modifizieren, aber ich bekomme einen Fehler. Ich ändere das Modell, aber die Tabelle wird nicht aktualisiert, nur wenn ich eine Spalte verschiebe, zeigt die Tabelle die geänderten Werte an.Autoupdating Zeilen in TableView von Modell

Ihnen ein Beispiel zeigen (13-6) ich das Tutorial nehmen:

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

Und ich ändere es einen Button mit und in ihrer Wirkung:

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

Ich denke, das Es ist ein Fehler in der Tabellenansicht, aber gibt es eine Chance, das zu beheben?

Vielen Dank!

Antwort

21

, damit TableView Datenänderungen verfolgen kann, die Sie benötigen, um relevante Felder als JavaFX-Eigenschaften verfügbar zu machen. In nächste Methoden Person Klasse von Tutorial:

public SimpleStringProperty firstNameProperty() { 
     return firstName; 
    } 

    public SimpleStringProperty lastNameProperty() { 
     return lastName; 
    } 

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

Es funktioniert einfach. Es ist genau das, wonach ich gesucht habe. Vielen Dank! –

+1

Großartig! Ich denke, es funktioniert mit Reflektion, daher ist es wichtig, dass die Eigenschaft Getter den richtigen Namen [Attribut] Property() haben. In meinem Fall hatte ich [Attribut] Property() bekommen, so dass es nicht aktualisiert wurde. Vielen Dank! –

3

Es ist ein Fehler in Tableview-Update (https://javafx-jira.kenai.com/browse/RT-22463). Ich hatte ein ähnliches Problem und nach einiger Suche ist dies meine Problemumgehung. Ich habe festgestellt, dass die Tabelle aktualisiert wird, wenn die Spalten entfernt und dann neu hinzugefügt werden.

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


Anwendungsbeispiel:

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