Ich habe ein JFreeChart, das ich durch einen Customizer (JRAbstractChartCustomizer) laufen lasse. Ich habe herausgefunden, wie man einzelne Balken und Artikelbeschriftungen entsprechend den Daten einfärbt (zB grün für> 90%, gelb für 75-90%, rot für < 75%), indem man BarRenderer erweitert und getItemLabelPaint(int row, int column)
und getItemPaint(int row, int column)
überschreibt. Jeder Balken hat ein entsprechendes Häkchen mit einem String-Label, da die Domain nach Namen und nicht nach Zahlenwerten benannt ist. Ich brauche eine Möglichkeit, die Hilfsstrichsbeschriftungen individuell zu färben, basierend auf dem Wert, der dem ähnlich ist, wie ich die Balken und die Elementbeschriftungen einfärbe.Anpassen der Farbe für einzelne Domänen-Achsen-Tick-Labels
Welche Methode überschreibe ich in BarRenderer, oder was sonst mache ich in meinem JRChartCustomizer, um die Farbe auf einer individuellen Basis zu überschreiben.
Was für den Artikel Etiketten ich tue: (ich im Grunde die gleiche Sache, aber für tick-Etiketten tun wollen)
class CustomBarRenderer extends BarRenderer {
private final Color COLOR_GREEN = new Color(0, 227, 0);
private final Color COLOR_YELLOW = new Color(247, 210, 0);
private final Color COLOR_RED = new Color(237, 26, 0);
@Override
public Paint getItemLabelPaint(int row, int col) {
CategoryDataset cDataset = getPlot().getDataset();
if (cDataset != null) {
Number itemValue = cDataset.getValue(row, col);
String rowKey = cDataset.getRowKey(row).toString();
String colKey = cDataset.getColumnKey(col).toString();
if (itemValue != null) {
int intVal = itemValue.intValue();
if (intVal > yellowHigh) {
return COLOR_GREEN;
} else if (intVal >= yellowLow) {
return COLOR_YELLOW;
} else {
return COLOR_RED;
}
}
}
// if all else fails...
return super.getItemLabelPaint(row, col);
}
@Override
public Paint getItemPaint(int row, int col) {
... similar to above ...
}
}
Das hilft sehr! Ich nehme nicht an, dass der Kategoriename Regex oder einen Platzhalter verwenden kann? Das wäre einfach zu einfach. –
Sorry, nicht das ich weiß. Sie können möglicherweise eine geeignete 'Funktion', dargestellt [hier] (http://stackoverflow.com/a/37222598/230513), weitergeben, um die gleiche Berechnung an beiden Stellen sicherzustellen. – trashgod
Keine Sorgen. Deine Antwort hat mein Problem sehr gut gelöst. –