行の条件に基づいて背景行の色を変更しようとしています。私は非常に近いですが、私はかなり私の指を置くことはできません。 (私はそれが基本的なリストからオブジェクトを引き出していると考えているので、データを動的に取得することにします)NatTableで動的に行の色を変更します
以下の例では、各行の色は、オブジェクト)を返します。 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