2016-04-03 3 views
2

Я показываю гистограмму и стараюсь, чтобы метки над столбцами отображались в правильной локали (они плавают). Я развиваюсь в JasperSoft Studio 6.2.0. Я установил глобальный и/или отчет (время выполнения) в en_US, но метки все еще отображаются в локали Windows (nl_NL). Затем я устанавливаю выражение метки вКак установить Locale на метки в диаграмме?

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 { Hours}) ', но это не позволяет мне установить шаблон и в любом случае далек от идеала. –

+0

Вы можете использовать $ P {REPORT_FORMAT_FACTORY} .createNumberFormat ("#, ## 0.0 ##;"), $ P {REPORT_LOCALE}). Format ($ F {Hours}) Это создало бы новый форматтер для каждого вызова, что, очевидно, не идеально с точки зрения производительности. – dada67

ответ

2

Да, я проверял, отчеты jasper не используют его $P{REPORT_LOCALE} при создании диаграммы, и я бы почти счел его ошибкой. Они используют методы для создания диаграммы, которая не поддерживает передачу Locale, но они могут автоматически генерировать настройки с правильной локалью.

Чтобы получить желаемый Locale в таблице с меткой, укажите ваши варианты.

default locale всего приложения.

Locale.setDefault(Locale.US); 

см. Setting java locale settings для других методов передачи параметров при запуске.

Если вы хотите изменить Locale метки в диаграмме необходимо создать JRChartCustomizer

Пример для 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); 
    } 
} 

В jrxml

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

Исправлена ​​ошибка, зафиксированная на https://sourceforge.net/p/jasperreports/code/ci/8387491cbd8077639cfc8869953664af8ccc4da4/ – dada67

+0

data67 спасибо. Итак, как мне получить локаль в настройке? *** \t общественный класс AssetsChartMod реализует JRChartCustomizer {**** \t общественного недействительными подгоняет (JFreeChart диаграмма, JRChart jasperChart) { – DavidDunham