Javafx 2 表中的额外元素始终可见,即使没有基础数据

Javafx 2 表中的额外元素始终可见,即使没有基础数据,javafx-2,javafx,Javafx 2,Javafx,这是我的问题。我有一个带有普通文本列的表,两列带有下拉列表,一列带有复选框。这是我对下拉列的cell factory的回调: Callback<TableColumn<Person, String>, TableCell<Person, String>> dropdownConditionCellFactory = new Callback<TableColumn<Person, String>

这是我的问题。我有一个带有普通文本列的表,两列带有下拉列表,一列带有复选框。这是我对下拉列的cell factory的回调:

     Callback<TableColumn<Person, String>, TableCell<Person, String>> dropdownConditionCellFactory =
                   new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
               @Override
               public TableCell call(TableColumn p) {
                 Tools.Tables.ComboBoxCell<partCondition> cell = new  Tools.Tables.ComboBoxCell<partCondition>(partConditionList)

                   return cell;
               }
           };
我的问题是,当表相当大且只有2行时,无论如何都会生成下拉列表,如下所示:


是否有一种方法可以只生成与此表的可观察列表中相同数量的下拉列表和复选框

使用电池时,请事先阅读说明,以了解如何在发动机罩下处理电池。简而言之,这些单元格在不同的行中重复使用,以呈现不同的项目/记录。每次重用单元格时,都会调用其
updateItem()
方法来刷新单元格正在渲染的项。因此,您需要重写此方法并在其中控制
图形,而不是在构造函数中:

    private ComboBox combo;

    public ComboBoxCell() {
        combo = new ComboBox();
    }

    public ComboBoxCell(ObservableList items) {
        combo = new ComboBox();
        combo.setItems(items);
    }

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            combo.getSelectionModel().select(item);
            setGraphic(combo);
            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        }
    }

除非列表很长,否则此方法非常有效。然后元素开始随机消失(著名的JavaFXTableView问题,这里讨论:)也许有另一种方法可以解决这个问题,也许是CSS?
    private ComboBox combo;

    public ComboBoxCell() {
        combo = new ComboBox();
    }

    public ComboBoxCell(ObservableList items) {
        combo = new ComboBox();
        combo.setItems(items);
    }

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            combo.getSelectionModel().select(item);
            setGraphic(combo);
            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        }
    }