这是我的问题。我的表有普通文本列,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;
}
};
这个细胞工厂的课程:
public static class 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行时,无论如何都会产生下拉列表,它看起来像这样:
有没有一种方法可以生成尽可能多的下拉列表和复选框,因为可以在此表中提供的可观察列表中有多少项?
答案 0 :(得分: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);
}
}