2013-07-24 24 views
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); 
    } 
} 

我的问题是,当表是相当大,只有2排,无论如何都会产生下拉列表,它看起来像这样:

enter image description here

有没有一种方法可以生成尽可能多的下拉列表和复选框,这与可见列表中提供此表的多个项目相同?

回答

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); 
     } 
    } 
+0

这种方法效果很好,除非列出的是很长。然后元素开始随机消失(Famous Javafx tableview problem,在这里讨论:http://stackoverflow.com/questions/13469661/textfield-inside-tableview-gone-after-scroll-javafx/18019529#18019529) 也许有解决这个问题的另一种方法,也许与CSS? – Damian

相关问题