0

这是我的问题。我有一个带有普通文本列的表格和 2 个带有下拉列表的列和一个带有复选框的表格。这是我对下拉列的单元工厂的回调:

     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;
               }
           };

这个细胞工厂的课程:

公共静态类 ComboBoxCell 扩展 TableCell {

    private ComboBox combo;

    public ComboBoxCell() {
        combo = new ComboBox();
        setGraphic(combo);
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);

    }

    public ComboBoxCell(ObservableList items) {
        combo = new ComboBox();
        combo.setItems(items);
        setGraphic(combo);
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        combo.getSelectionModel().selectFirst();
    }

    public T getSelectedItem()
    {
        return (T) combo.getSelectionModel().getSelectedItem();
    }

    public void setSelectedItem(T t)
    {
        combo.getSelectionModel().select(t);
    }
}

我的问题是,当 Table 很大并且其中只有 2 行时,无论如何都会生成下拉列表,它看起来像这样:

在此处输入图像描述

有没有办法只生成与提供该表的可观察列表中的项目一样多的下拉列表和复选框?

4

1 回答 1

1

在使用单元格时,请事先阅读Cell API,以了解它们是如何在幕后处理的。简而言之,单元格在不同的行中重复使用以呈现不同的项目/记录。每次重用单元格时,updateItem()都会调用其方法来刷新单元格正在呈现的项目。因此,您需要重写此方法并控制graphic其中,而不是在构造函数中:

    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);
        }
    }
于 2013-07-24T15:28:39.127 回答