2016-07-07 9 views
0

私はjavafx TableViewによって表示された最高得点リストを持つ小さなゲームを開発しています。私はTableViewノードであるサブクラスHighscoreTableView extends TableViewを作成しました。これは、必要な場合にはTableColumnsを自動的に作成し、構築時にそれらのデータを埋め込みます。javafx:デフォルトでテーブルビューをソート

初期化時にデフォルトの列でその表をソートする必要があります。

期間がソートを定義する必要があり TableColumnある
duration.setSortType(TableColumn.SortType.DESCENDING); 
this.getSortOrder().add(duration); 
duration.setSortable(true); 
this.sort(); 

:私は、次のコード行を追加しました。もちろん、TableViewに追加されています。しかし、HighscoreTableViewという新しいインスタンスを作成すると、ユーザーが列ヘッダーの1つをクリックするまで、既定ではソートされません。これは予期せぬことです。this questionthis questionthis questionはそうするべきだと言います。何か案は?再生用

さらなる情報: HighscoreTableViewクラスは4つのタブを有するTabPaneが含まHighscoreStage extends Stageクラスによって使用されます。各タブにはHighscoreTableViewが含まれ、静的Dataオブジェクトとは異なるデータが使用されています。データモデルはクラスHighscoreEntryであり、ObservableListHighscoreTableViewに追加されます。私のフルコードはhereです。

+0

私は、TableViewの 'items'プロパティのリストを動作させるソートは、' Comparable'プロパティがTableViewのものにバインドされた 'SortedList'でなければならないと考えています。これはおそらく初期値の場合ですが、リセットします。 'this.setItems(list.getObservableList());'を 'this.getItems()。clear;'に続けて 'this.getItems()。addAll(list);'に変更してみてください – Itai

答えて

2

データがロードされる前にsort()に電話しています。代わりに、テーブルビューにデータを追加/変更した後に毎回呼び出す必要があります。 また、SortedListを適切なコンパレータとともに使用すると、元のバッキングリストをラップすることができます。すべての変更が自動的に表示されます。

+0

ありがとう、それはそれを解決しました! – LukeLR

関連する問題