2016-03-26 6 views
1

特定の列でTableView tableをソートしようとしています。私がテーブルを表示すると、それは表示されますが、私がここや他のサイトで見つけたものから、私はますます混乱しています。ここテーブルビューを特定の列でソートするJavafx

は、私が最初に性別でテーブルをソートしたいテーブルビューコード

public TableView<Animal> animalLostLocation(ArrayList<Animal> list) 
    { 

     TableColumn<Animal, String> atypeColumn = new TableColumn<>("Animal Type"); 
     atypeColumn.setMinWidth(200); 
     atypeColumn.setSortable(false); 
     atypeColumn.setCellValueFactory(new PropertyValueFactory<>("aType")); 

     TableColumn<Animal, String> descriptionColumn = new TableColumn<>("Description"); 
     descriptionColumn.setMinWidth(200); 
     descriptionColumn.setSortable(false); 
     descriptionColumn.setCellValueFactory(new PropertyValueFactory<>("description")); 

     TableColumn<Animal, String> breedColumn = new TableColumn<>("Breed"); 
     breedColumn.setMinWidth(80); 
     breedColumn.setSortable(false); 
     breedColumn.setCellValueFactory(new PropertyValueFactory<>("breed")); 

     TableColumn<Animal, String> nameColumn = new TableColumn<>("Name"); 
     nameColumn.setMinWidth(200); 
     nameColumn.setSortable(false); 
     nameColumn.setCellValueFactory(new PropertyValueFactory<>("name")); 

     TableColumn<Animal, Catergory> catColumn = new TableColumn<>("Category"); 
     catColumn.setMinWidth(200); 
     breedColumn.setSortable(false); 
     catColumn.setCellValueFactory(new PropertyValueFactory<>("category")); 

     TableColumn<Animal, Integer > ageColumn = new TableColumn<>("Age"); 
     ageColumn.setMinWidth(50); 
     ageColumn.setSortable(false); 
     ageColumn.setCellValueFactory(new PropertyValueFactory<>("age")); 

     TableColumn<Animal, Integer > idColumn = new TableColumn<>("ID"); 
     idColumn.setMinWidth(50); 
     idColumn.setCellValueFactory(new PropertyValueFactory<>("ID")); 

     TableColumn<Animal, Boolean > genColumn = new TableColumn<>("Male"); 
     genColumn.setMinWidth(50); 
     genColumn.setSortable(false); 
     genColumn.setCellValueFactory(new PropertyValueFactory<>("gender")); 

     table = new TableView<Animal>(); 

     table.setItems(getAnimal(list)); 

     table.getColumns().addAll(genColumn, idColumn, nameColumn, atypeColumn, ageColumn, breedColumn, descriptionColumn, catColumn); 
     return table; 
    } 

です。

私の知る限り、SortedList/FilteredListを作成する必要がありますが、私がオンラインで見つけたチュートリアルは、私をもっと混乱させるだけです。

SortedList/FilteredListを使用する必要がありますか、それとも良い選択肢がありますか?

は、ここではリンクの1つが、私はhttp://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/

を見つけますことができますしてください私のためにダウンし、それダム誰?

+0

AFAIK James_D(javafxゴールドバッジを持つ53kユーザー)は、一度リンクしたサイトのチュートリアルの1つについて否定的なコメントを出しました。このチュートリアルでは、 'TableView'はすでにソート機能を提供しているという事実を無視しているようですので、私は彼に同意するつもりです...このサイトは最良の学習ソースではないかもしれません...(私はこのサイトで十分読んでいませんしかし全体的な質についての十分に確立されたレビューをする) – fabian

+0

thatsはsortlists/FilteredListsを使用してテーブルビューをソートすることを提案している唯一のサイトではありません。そのメソッドは、私が見つけることができるすべてのスレッドで提案されるようです。 – Grimeire

答えて

4

ソートされたリストを自分で作成する必要はありません。ただ、sortOrder list of your TableViewにすることによって並べ替えるには、列を追加します。

table.getSortOrder().add(genColumn); 

を列(複数可)に表示された種類に応じて、あなたも(see TableColumnBase.comparatorProperty

このアプローチを自分で使用するために、コンパレータを設定することもできますバッキングリストを並べ替える(またはリストの「ソートされたビュー」を使用する(これはSortedListの機能です)代わりに、ユーザーのやり取り(列ヘッダーをクリック)によって提供される並べ替えを使用する利点があります。

関連する問題