我試圖根據行標準更改背景行顏色。我非常接近,但有些東西我不能完全放在手指上。 (我相信這是因爲我從一個底層列表中抽取一個對象與動態獲取數據,我在下面標記了這部分代碼)動態更改NatTable中的行顏色
在下面的示例中,每行顏色都基於一個Object(MyObj )具有成功或失敗的價值。如果myObj具有成功值,則該行應爲綠色。如果myObj有一個失敗值,那麼該行應該是紅色的。如果myObj沒有值,則應使用默認的行顏色。
當我運行代碼時,行顏色按預期顯示。但是,如果我對列進行排序,則原始行索引在數據移動到新行索引時保持該顏色。我預計行顏色會隨着對象移動,而不是始終固定在該行索引處。
Example:
Row 1 - "SUCCESS" - Shows Green
Row 2 - "FAIL" - Shows Red
如果我有點該列的字母順序,我得到:
Row 1 - "FAIL - Shows Green
Row 2 - "SUCCESS" - Shows Red
下面的代碼片段我用它來生成例如:
void example() {
getNatTable().addConfiguration(new AbstractRegistryConfiguration() {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
Style cellStyleSuccess = new Style();
cellStyleSuccess.setAttributeValue(
CellStyleAttributes.BACKGROUND_COLOR,
COLOR_SUCCESS);
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE,
cellStyleSuccess,
DisplayMode.NORMAL, "SUCCESS");
Style cellStyleFail = new Style();
cellStyleFail.setAttributeValue(
CellStyleAttributes.BACKGROUND_COLOR,
COLOR_FAILURE);
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE,
cellStyleFail,
DisplayMode.NORMAL, "FAIL");
}
});
DataLayer dl = getGlazedListsGridLayer().getBodyDataLayer();
IConfigLabelAccumulator cellLabelAccumulator =
new IConfigLabelAccumulator() {
@Override
public void accumulateConfigLabels(LabelStack configLabels,
int columnPosition, int rowPosition) {
configLabels.getLabels().clear();
// TODO Is this the issue? Is there a better way to
// pull MyObj here?
MyObj myObj = getEventList().get(rowPosition);
if (myObj.getFoo().equals("SUCCESS")) {
configLabels.addLabel("SUCCESS");
} else if (myObj.getFoo().equals("FAIL"))) {
configLabels.addLabel("FAIL");
} else {
// default color
}
}
};
dl.setConfigLabelAccumulator(cellLabelAccumulator);
getNatTable().configure();
}
是的我正在使用一個EventList。我必須做你說的。謝謝! – ekjcfn3902039
僅供參考使用: MyObj myObj = getGlazedListsGridLayer()。getBodyDataProvider()。getRowObject(rowPosition); – ekjcfn3902039