JavaFX:TableView中的ComboBox,每行有不同的内容

时间:2016-04-06 10:48:37

标签: javafx combobox set tableview

我尝试为每行的组合框创建一个具有不同内容的tableview。用户可以在每个按钮的表格视图中添加一个条目,该条目的对象定义组合框的内容(ObservableList将在后台更改,表示单击按钮后将填充新项目)。我成功地为每一行创建了一个组合框,但是如果我更改项目,则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);

尝试将tableview可视化以便更好地理解:

| TXT | COMBOBOX |
| Text1 | [ContentList1&gt;] |
| Text2 | [ContentList2&gt;] |
| ........ | [........................] |

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

您似乎将组合框的项目设置为从某个固定模型实例检索的项目,而不是从显示单元格的行所表示的模型实例。

替换

tableViewkennntisgradComboBox.setItems(selectedFilterParameter.getKenntnisgradAuswahl());

tableViewkennntisgradComboBox.setItems(getTableView().getItems().get(getIndex()).getKenntnisgradAuswahl());