Ich versuche, die Hintergrundzeilenfarbe basierend auf den Zeilenkriterien zu ändern. Ich bin sehr nah dran, aber da ist etwas, an das ich nicht wirklich denken kann. (Ich glaube, das liegt daran, dass ich ein Objekt aus einer zugrunde liegenden Liste ziehe, anstatt die Daten dynamisch zu erhalten. Ich habe diesen Abschnitt des Codes unten markiert)Dynamische Änderung der Zeilenfarbe in NatTable
Im folgenden Beispiel basiert jede Zeilenfarbe auf einem Objekt (MyObj) die einen Erfolgs- oder Fehlerwert hat. Wenn myObj einen Erfolgswert hat, sollte die Zeile grün sein. Wenn myObj einen Fehlerwert hat, sollte die Zeile rot sein. Wenn myObj keinen Wert hat, sollte die Standardzeilenfarbe verwendet werden.
Wenn ich den Code ausführen, werden die Zeilenfarben wie erwartet angezeigt. Wenn ich jedoch die Spalten sortiere, behält der Index der ursprünglichen Zeilen diese Farbe bei, während die Daten in einen neuen Zeilenindex verschoben werden. Ich würde erwarten, dass sich die Zeilenfarbe mit dem Objekt bewegt, anstatt immer in diesem Zeilenindex fixiert zu sein.
Example:
Row 1 - "SUCCESS" - Shows Green
Row 2 - "FAIL" - Shows Red
Wenn ich irgendwie auf dieser Spalte alphabetisch ich:
Row 1 - "FAIL - Shows Green
Row 2 - "SUCCESS" - Shows Red
Unten ist der Code-Schnipsel ich das Beispiel zu erzeugen, verwenden:
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();
}
Ja ich verwende eine EventList. Ich werde tun müssen, was du gesagt hast. Vielen Dank! – ekjcfn3902039
FYI Ich benutzte: MyObj myObj = getGlazedListsGridLayer(). GetBodyDataProvider(). GetRowObject (rowPosition); – ekjcfn3902039