2017-11-07 24 views
0

すべての囚人データを単一のTableViewに表示したい。 囚人が(すべてのコードはサンプルです)のようになります。ObservableListをTableView JavaFXに挿入

public class Prisoner { 
    private String id; 
    private String name; 
    private PrisonerCase case; 
    Prisoner() { 
     id = "Unknown"; 
     name = "Unknown"; 
     case = new PrisonerCase(); 
    } 
} 

public class PrisonerCase { 
    private String id_case; 
    private String date_case; 
    PrisonerCase() { 
     id_case = "unknown"; 
     date_case = "unknown"; 
    } 
} 

それから私は私のtableViewを持っている: データはObservableList<Prisoner>であり、私は私のデータベースを持っているすべての囚人を返します。私はすべての囚人とすべての囚人事件を機能getData()に築いた。

TableView tv = new TableView(); 
data = Database.getData(); 
TableColumn id_column = new TableColumn("ID"); 
id_column.setCellValueFactory(new PropertyValueFactory<Prisoner, String>("id")); 

これは問題なく動作しますが、私の質問はどのようにしてTableViewにケースを追加できますか? 試しました

TableColumn n_case_column = new TableColumn("N° Case"); 
n_case_colmun.setCellValueFactory(new PropertyValueFactory<PrisonerCase, String>("id_case")); 

しかし、動作しません。 もちろん、私はすべての列を最後にTableViewに追加することを忘れませんでした。あなたが同じテーブルビュー上の2つの異なるクラスからのデータを使用する必要がtype.If

tv.setItems(data); 
tv.getColmuns().addAll(id_column, n_case_column); 
+0

を行うことができます。 tv.setItems(data); 'また、' TableColumn columnName'のような列の型を指定してください。 – Anas

+0

項目が何も解決しないうちに列を追加するという事実。しかし、列のタイプがありがとう – NicoTine

答えて

1

まず、決して生の型を使用します。 TableViewのタイプは、各行を表すオブジェクトのタイプです(この場合はPrisoner)。 TableColumnのタイプは、最初にTableViewのタイプで、第2に、そのカラムの各セルに表示されるデータのタイプです。

だからあなたはあなたがあなたのクラスのメソッドを示さなかった

TableView<Prisoner> tv = new TableView<>(); 
TableColumn<Prisoner, String> idColumn = new TableColumn<>("ID"); 
TableColumn<Prisoner, String> nCaseColumn = new TableColumn<>("N° Case"); 

を持っている必要があります。私はあなたが標準Java naming conventionsに従っていると仮定するつもりです(上記の変数名のいくつかをこれに合わせて変更しました)。 。その後、私はあなたのコードは `tv.getColmuns()のaddAll(たid_column、n_case_column)でなければなりませんので、あなたが項目の前にテーブルビューに列を追加すべきだと思う

idColumn.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getId())); 
// or 
// idColumn.setCellValueFactory(new PropertyValueFactory<>("id")); 
// but the first version above is better, imho 

nCaseColumn.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getCase().getIdCase())); 
+0

それは完璧に働いた!どうもありがとう – NicoTine

-1

テーブルビューが1行のみを表示することができ、最良のオプションは、二つのクラスのラッパークラスを作成することです。

Check this link

+0

これはまさに2つの異なるクラスではありません。 PrisonerCaseはPrisonerにネストされています。しかし、リンクのおかげで – NicoTine

関連する問題