2012-06-06 21 views
6

He estado buscando información sobre actualización de datos en una tabla. Estaba intentando modificar directamente el modelo, pero me sale un error. Modifico el modelo, pero la tabla no se actualiza, solo cuando muevo una columna, la tabla muestra los valores modificados.Renovación de filas en TableView desde el modelo

Para mostrar un ejemplo (13-6) tomo el tutorial:

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

Y modifico lo que incluye un botón y en su acción:

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

supongo que es un error en la tabla, pero ¿hay alguna posibilidad de arreglar esto?

¡Gracias!

Respuesta

21

para que TableView sea capaz de rastrear los cambios de datos que necesita para exponer los campos relevantes como propiedades de JavaFX. Añadir próximos métodos para Person clase de tutorial:

public SimpleStringProperty firstNameProperty() { 
     return firstName; 
    } 

    public SimpleStringProperty lastNameProperty() { 
     return lastName; 
    } 

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

Simplemente funciona. Es justo lo que estaba buscando. ¡Gracias! –

+1

¡Genial! Supongo que funciona con reflexión, por lo que es importante que los captadores de propiedades tengan el nombre correcto [atributo] Propiedad(). En mi caso, obtuve [attribute] Property() por lo que no estaba actualizando. ¡Gracias! –

3

Hay un error en la actualización de TableView (https://javafx-jira.kenai.com/browse/RT-22463). Tuve un problema similar y después de una búsqueda esta es mi solución. Descubrí que si las columnas se eliminan y luego se vuelven a agregar, la tabla se actualiza.

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


Ejemplo de uso:

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