Я пытаюсь изменить цвет строки фона на основе критериев строк. Я очень близко, но есть что-то, от чего я не могу положиться. (Я считаю, что это потому, что я вытаскиваю объект из основного списка и получаю данные динамически. Я отметил этот раздел кода ниже)Динамически изменить цвет строки в NatTable
В приведенном ниже примере каждый цвет строк основан на объекте (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
FYI Я использовал: MyObj myObj = getGlazedListsGridLayer(). GetBodyDataProvider(). GetRowObject (rowPosition); – ekjcfn3902039