4

私はJavaFXTableViewを次のように定義しています:

TableView<MyMessage> messages;

ObservableListでサポートされています:

private ObservableList<MyMessage> messagesList;

// Allocate the message list
messagesList = FXCollections.observableArrayList();

// Set the list into place
messages.setItems( messagesList );

MyMessageオブジェクトには、すべてString型の10個のフィールドがあります。MyMessageオブジェクトをObservableListに挿入するバックグラウンド操作があります。

messages.add( new MyMessage( String ... colData ) );

すべてが宣伝どおりに機能します。TableViewのテーブル行は、オブジェクトがObservableListに挿入されるときに更新されます。

期待どおりに機能していないように見えるのは、列ヘッダーをクリックしてテーブルを並べ替えると、バックグラウンドスレッドによって挿入された後続のアイテムがテーブルの最後に追加されることです。適切にソートされた行の位置ではありません。クリックして列を再配置すると、テーブルは適切に再配置されます。

ObservableListに何かを追加するたびに、テーブルを強制的に再ソートする必要がありますか?または、TableViewがそれを処理する必要があります。

ありがとう。

4

2 に答える 2

2

TableViewが私のためにそれを処理する必要があります

いいえ。

基になるリストが変更されたときに TableView が並べ替え順序を維持するようにという要求がありましたが、「問題ではない」としてクローズされました。詳細については、問題に関するコメントを確認してください。要するに、リストのソートを維持することは、基礎となる ObservableList またはリストを維持するアプリケーションの責任です。

ObservableListに何かを追加するたびに、テーブルの再ソートを強制する方法が必要ですか?

本質的に、はい。

JavaFX には、TableView と効果的に連携してアプリケーションのすべての並べ替え処理をほぼ自動化する SortedObservableList 実装が同梱されるはずでした。しかし、JavaFX 2.2 の場合、この機能は含まれませんでした。現在、この機能は JDK/JRE8 の一部として配信される予定であり、TableView での並べ替えサポートの改善のために、この包括的な問題を介して追跡できます。

于 2012-11-16T05:29:58.527 に答える