2013-08-27 27 views
0

我是NatTable的新手。我已經深入瞭解了NatTable的例子及其源代碼,但沒有解決我的一個問題。 在NatTable中,我有一列應該提供一個用於選擇的複選框,具體取決於另一列的值。 我已經使用了Checkboxpainter,checkboxcelleditor,defaultbooleanconverter和IEditableRule。這將呈現一個複選框,而不管該單元格是否可編輯,儘管它允許我僅在複選框被啓用時纔將其標記。NatTable - 僅當編輯時需要複選框

但是,根據我們的要求,如果行不可選,用戶不應該看到複選框。或者在最壞的情況下,應該爲無法選擇的行呈現disabledcheckbox。

有人可以幫我嗎?

感謝和問候,

Pradyumna

回答

0

得到了一個解決方案。 我不得不寫一個自定義checkboxpainter(從一個可用開箱即用的繼承),並覆蓋其的getImage方法返回null適當的細胞

0

有我剛纔應用到類似的情況在我的工作,更好的解決方案。

我做到了通過添加下面的配置表中:

// make checkbox cells editable 
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE, DisplayMode.EDIT, CONFIG_LABEL_CHECKBOX); 

// register the checkbox editor for DisplayMode.EDIT 
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(), DisplayMode.EDIT, CONFIG_LABEL_CHECKBOX); 

// register the checkbox painter for DisplayMode.NORMAL 
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, new CheckBoxPainter(), DisplayMode.NORMAL, CONFIG_LABEL_CHECKBOX); 

// register the painter for empty cells in DisplayMode.NORMAL 
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, new BackgroundPainter(), DisplayMode.NORMAL, CONFIG_LABEL_EMPTY); 

基本上,這引入了配置標記CONFIG_LABEL_CHECKBOX爲可編輯的複選框,用於CONFIG_LABEL_EMPTY一個空單元格。

現在,所有你需要做的是將IConfigLabelAccumulator連接到您的bodyDataLayer

bodyDataLayer.setConfigLabelAccumulator(new IConfigLabelAccumulator() 
{ 
    public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) 
    { 
    if(columnPosition == CHECKBOX_COLUMN_INDEX) 
    { 
     if(someCodeToCheckIfRowIsEditable(rowPosition)) 
     { 
     configLabels.add(CONFIG_LABEL_CHECKBOX); 
     } 
     else 
     { 
     configLabels.add(CONFIG_LABEL_EMPTY);    
     } 
    } 
    } 
} 
相關問題