6

データをテーブルビューに更新することに関する情報を探していました。モデルを直接変更しようとしましたが、バグが発生します。モデルを変更しましたが、テーブルが更新されません。列を移動した場合にのみ、テーブルに変更された値が表示されます。

例を示すために(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));

テーブルビューのバグだと思いますが、これを修正する機会はありますか?

ありがとうございました!

4

2 に答える 2

21

TableViewがデータの変更を追跡できるようにするには、関連するフィールドをJavaFXプロパティとして公開する必要があります。Personチュートリアルからクラスに次のメソッドを追加します。

    public SimpleStringProperty firstNameProperty() {
        return firstName;
    }

    public SimpleStringProperty lastNameProperty() {
        return lastName;
    }

    public SimpleStringProperty emailProperty() {
        return email;
    }
于 2012-06-06T12:37:37.587 に答える
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);
于 2013-09-04T00:23:42.417 に答える