2016-02-19 161 views
0

我想在DateTime X軸上顯示每月刻度。我已經使用下面的代碼實現了這一點。Jasper時間軸日期軸:顯示每月刻度但顯示年度刻度標籤

DateAxis dateAxis = (DateAxis)chart.getXYPlot().getDomainAxis(); 
DateTickUnit unit = new DateTickUnit(DateTickUnit.MONTH,1); 
dateAxis.setTickUnit(unit); 

現在我想只顯示特定月份的刻度標籤(比如Jan,其餘月份的標籤將保持空白)。

我該如何做到這一點?

回答

1

你可以做到以下幾點:

 DateFormat axisDateFormat = dateAxis.getDateFormatOverride(); 
     if (axisDateFormat == null) { 
      axisDateFormat = DateFormat.getDateInstance(DateFormat.SHORT); 
     } 
     dateAxis.setDateFormatOverride(new SelectiveDateFormat(axisDateFormat, Calendar.MONTH, 0)); 

... 

class SelectiveDateFormat extends DateFormat { 
    private final DateFormat format; 
    private final int dateField; 
    private final int fieldValue; 

    public SelectiveDateFormat(DateFormat format, int dateField, int fieldValue) { 
     this.format = format; 
     this.dateField = dateField; 
     this.fieldValue = fieldValue; 
    } 

    @Override 
    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { 
     Calendar calendar = Calendar.getInstance(format.getTimeZone()); 
     calendar.setTime(date); 
     int value = calendar.get(dateField); 
     if (value == fieldValue) { 
      format.format(date, toAppendTo, fieldPosition); 
     } 
     return toAppendTo; 
    } 

    @Override 
    public Date parse(String source, ParsePosition pos) { 
     return format.parse(source, pos); 
    } 
} 

這是一個小哈克,但乍一看我沒有看到其他更優雅的解決方案。

+0

謝謝:)這工作得很好。 我剛剛對滴答的日期格式有問題,並使用下面的代碼來修復它。 if(axisDateFormat == null)axisDateFormat = new SimpleDateFormat(「yyyy」); } – dnaik

+0

有沒有辦法對刻度標記進行條件格式化? – dnaik

+0

據我所見,JFreeChart不支持修改刻度筆劃或從一個刻度到另一個刻度。如果這是你需要的,你可以考慮擴展JFreeChart。 – dada67