2016-04-06 33 views
0

各行のコンボボックスの内容が異なるテーブルビューを作成しようとしています。ユーザーはボタンごとにテーブルビューにエントリを追加することができ、このエントリのオブジェクトはコンボボックスのコンテンツを定義します(ObservableListはバックグラウンドで変更されます。つまり、ボタンをクリックした後に新しいアイテムで埋められます)。私は正常に各行のコンボボックスを作成しましたが、アイテムを変更すると、テーブルビュー内のすべてのコンボボックスの内容が変わります。JavaFX:TableViewのコンボボックス(各行ごとに内容が異なる)

TableColumn<Filterparameter, String> kenntnisgradComboBoxColumn = new TableColumn<Filterparameter, String>("Ausprägung"); 
    kenntnisgradComboBoxColumn.setCellValueFactory(new PropertyValueFactory<Filterparameter, String>("")); 

    Callback<TableColumn<Filterparameter, String>, TableCell<Filterparameter, String>> cellFactoryKenntnisgradComboBoxColumn = new Callback<TableColumn<Filterparameter, String>, TableCell<Filterparameter, String>>() 
    { 
     @Override 
     public TableCell<Filterparameter, String> call(final TableColumn<Filterparameter, String> param) 
     { 
      final TableCell<Filterparameter, String> cell = new TableCell<Filterparameter, String>() 
      { 
       // Display combobox if the row is not empty 
       @Override 
       public void updateItem(String item, boolean empty) 
       { 
        super.updateItem(item, empty); 

        if (empty) 
        { 
         setGraphic(null); 
        } 
        else 
        { 
         tableViewkennntisgradComboBox = new ComboBox<Kenntnisgrad>(); 
         // Here content of every combobox changes instead of only changing the combobox of selected row 
         tableViewkennntisgradComboBox.setItems(selectedFilterParameter.getKenntnisgradAuswahl()); 

         tableViewkennntisgradComboBox.setPadding(new Insets(-1, 0, -1, 0)); 
         tableViewkennntisgradComboBox.setMinWidth(kenntnisgradComboBoxColumn.getWidth() - 6); 
         tableViewkennntisgradComboBox.setPrefWidth(kenntnisgradComboBoxColumn.getWidth() - 6); 
         tableViewkennntisgradComboBox.setMaxWidth(kenntnisgradComboBoxColumn.getWidth() - 6); 

         setGraphic(tableViewkennntisgradComboBox); 
        } 
       } 
      }; 

      return cell; 
     } 
    }; 

    kenntnisgradComboBoxColumn.setCellFactory(cellFactoryKenntnisgradComboBoxColumn); 

はより良く理解するためにテーブルビューを視覚化するようにしてください:

| TXT     | COMBOBOX         |
|テキスト1 | [ContentList1>] |
|テキスト2 | [ContentList2>] |
| ........ | [........................] |

事前に感謝します。

+0

tableViewkennntisgradComboBox.setItems(selectedFilterParameter.getKenntnisgradAuswahl()); 

を交換してください同じもの)、表示される値のリストが 'Filterparameter'のプロパティであれば最も簡単です(少なくとも' Filterparameter'をコンボに表示する値のリストにマップする方法が必要です対応する行のボックス)。 –

+0

こんにちはジェームズ、あなたの答えをありがとう。 "今はすべての細胞が同じものを共有しているように見える" - それもそうだと思う。また、私はFilterparameterにプロパティを持っています。これは "kenntnisgradAuswahl"と呼ばれています。これはObservableList であり、投稿されたソースコードの "[...]。getKenntnisgradAuswahl()"によって呼び出されています。私はUluk Biyによってここからいくつかのコードを見つけました。(http://stackoverflow.com/questions/29387386/populate-combo-box-list-dynamically-for-each-row-in-javafx-table-view)コンボボックスはupdateEventではなく、editing-Eventに設定されます。私は自分の意図に合うように移植しようとしましたが失敗しました。 – Nighty

+1

コンボボックスの項目を 'getTableView()。getItems()。get(getIndex())。getKenntnisgradAuswahl()'に設定します。 (しかし、各セルのコンボボックスを定義してください) –

答えて

1

コンボボックスの項目を、セルが表示されている行で表されるモデルインスタンスではなく、一部の固定モデルインスタンスから取得したものに設定しているようです。

あなたは今、それはすべての細胞株のように見えるので、各セルには独自のコンボボックスを持っている(、tableViewkennntisgradComboBox`は、細胞内のフィールドであることを `必要

tableViewkennntisgradComboBox.setItems(getTableView().getItems().get(getIndex()).getKenntnisgradAuswahl()); 
関連する問題