2016-04-03 69 views
2

我正在顯示一個條形圖並試圖讓正確的語言環境(它們是浮動)顯示在酒吧上方的標籤。我正在開發JasperSoft Studio 6.2.0。我將全局和/或報告(執行時間)區域設置爲en_US,但標籤仍顯示在我的Windows區域設置(nl_NL)中。然後我將標籤表達式設置爲如何將區域設置設置爲條形圖中的標籤?

new DecimalFormat("#,##0.0##;(#,##0.0##-)").format($F{Hours}) 

但它仍然在Windows語言環境中。只有當我明確設置標籤表達en_US區域:

NumberFormat.getInstance(Locale.US).format($F{Hours}) 

做我得到正確的結果。在其他地方(TextFields),設置格式模式(例如"#,##0.0##;(#,##0.0##-)")會導致應用正確的語言環境。在條形圖設置中,沒有辦法以相同的方式指定模式,這就是爲什麼我試圖在代碼中這樣做。

這是一個錯誤還是我錯過了什麼?

+0

我看到我可以使用'NumberFormat.getInstance($ P {REPORT_LOCALE})。format($ F {小時})',但這並不能讓我設定模式,而且遠非理想。 –

+0

您可以使用$ P {REPORT_FORMAT_FACTORY} .createNumberFormat(「#,## 0.0 ##;(#,## 0.0 ## - )」,$ P {REPORT_LOCALE})。格式($ F {Hours}) 這將在每次調用時創建一個新的格式化程序,從性能角度來看這顯然不理想。 – dada67

回答

2

是的,我確認了,jasper報告在生成圖表時沒有使用其$P{REPORT_LOCALE},我幾乎認爲它是一個錯誤。他們使用metods生成不支持傳遞Locale的圖表,但他們可以自動生成具有正確語言環境的定製器。

要在圖表標籤中獲得所需的Locale您的選擇是。

設置默認語言環境整個應用程序。

Locale.setDefault(Locale.US); 

看到Setting java locale settings其他方法如啓動時傳遞參數。

如果你只想要更改標籤的Locale在圖表中,你需要爲BARCHART

public class MyLocaleCustomizer implements JRChartCustomizer{ 
    @Override 
    public void customize(JFreeChart chart, JRChart jrchart) { 
     CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
     StandardCategoryItemLabelGenerator lg = new StandardCategoryItemLabelGenerator("{2}",NumberFormat.getNumberInstance(Locale.US)); 
     plot.getRenderer().setBaseItemLabelGenerator(lg); 
    } 
} 

創建JRChartCustomizer

例子在JRXML

<barChart> 
    <chart customizerClass="MyLocaleCustomizer"> 
     .. 
    </chart> 
    .. 
</barChart> 
+1

確實存在一個bug,修復在https://sourceforge.net/p/jasperreports/code/ci/8387491cbd8077639cfc8869953664af8ccc4da4/ – dada67

+0

data67謝謝。那麼現在如何在定製器中獲取語言環境? *** \t公共類AssetsChartMod實現JRChartCustomizer {**** \t公共無效定製(JFreeChart圖表,JRChart jasperChart){ – DavidDunham