2016-06-08 115 views
1

我有一個JFreeChart,它通過定製器(JRAbstractChartCustomizer)運行。我已經想通過擴展BarRenderer並覆蓋getItemLabelPaint(int row, int column)getItemPaint(int row, int column)來根據數據(例如綠色> 90%,黃色75-90%,紅色< 75%)對單個條和項目標籤着色。每個欄都有一個帶有String標籤的相應刻度,因爲該域是按名稱而不是數字值。我需要一種方法來根據類似於我爲條和顏色標籤着色的值單獨着色滴答標籤。自定義單個域軸刻度標籤的顏色

我在BarRenderer中重寫了哪種方法,或者在JRChartCustomizer中如何在個別基礎上重寫顏色以做其他事情。

我在做什麼了項目標籤:(我想基本上做同樣的事情,但對於刻度標記)

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 ... 
    } 
} 

回答

1

圖表的域名軸的刻度標籤由一個CategoryAxis呈現。您可以使用setTickLabelPaint()按類別爲標籤着色。下面的示例修改BarChartDemo1以使​​類別標籤爲綠色陰影。

image

CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
CategoryAxis domain = plot.getDomainAxis(); 
domain.setTickLabelPaint("Test", Color.green.darker()); 

要精確控制,可以在能訪問你的CustomBarRenderer引用的數據集的自定義CategoryAxis覆蓋getTickLabelPaint()。現有的​​使用Map<Category, Paint>作爲查找表。 Map是私人的,但該方法可能會讓您瞭解如何繼續。

+0

這會有很大幫助!我不認爲類別名稱可以使用正則表達式或通配符?這太簡單了。 –

+0

對不起,我不知道。你可能會傳遞一個合適的'Function',如[這裏](http://stackoverflow.com/a/372​​22598/230513)所示,以確保在兩個地方進行相同的計算。 – trashgod

+0

不用擔心。你的回答很好地解決了我的問題。 –

相關問題