JFreeChart - обновить значения набора данных в классе настройщика - PullRequest
0 голосов
/ 25 сентября 2019

Используя IReport, я создаю отчет и пытаюсь отобразить столбчатую диаграмму с накоплением, чтобы отобразить следующий набор результатов из запроса.

В основном это рабочие записи Shift.A Shift может иметь несколько Operators, а каждый оператор может иметь несколько Entries.Каждая запись похожа на состояние активности оператора в смену, например (Added, Started, On-Break, Joined, Ended) в смену.В конце концов Duration - это время (в секундах), в течение которого эта конкретная запись продолжалась.IE разница между Entry_Time и следующим Entry_Time.Как видите, записи сгруппированы по оператору покупки и упорядочены по времени их появления.

enter image description here

Ожидается, что на графике будет отображаться время на ValueAxis (Yось), код оператора для категории (ось X) и типы записей в виде (серии), уложенные вдоль полос с разными «назначенными цветами», которые должны представлять «продолжительность» соответствующей записи.Тип записи может быть повторяющимся, например, «CUTTER-1» дважды включался и снова присоединялся.Поэтому в идеале диаграмма должна представлять обе эти записи в отдельных барах на BarStack в те времена против CUTTER-1.

Попытка # 1

enter image description here

При указанных выше настройках я получил эту диаграмму.Он правильно показывает операторы, но имеет две проблемы Prob # 1 , StackedBars не верны (то есть должно быть несколько записей OnBreak & Joined для оператора CUTTER-1). Prob # 2 Кроме того, в верхней части ValueAxis я хочу показать Entry Times.

Для краткости я не добавил два столбца CREATED_DELPHI & ENDED_DELPHI в приведенном выше результатеустановить скриншот.Это в основном показывает время начала и окончания смены и остается неизменным на протяжении всего времени.Обратите внимание, что время хранится как двойное значение в БД (пожалуйста! Не спрашивайте почему? И давайте продолжим ...), как показано в столбце 'ENTRY_TIME_DELPHI'.

Попытка # 2

enter image description here

Для решения второй проблемы я добавил Max & Min Range Axis Values, которые являются CREATED_DELPHI & ENDED_DELPHI соответственно.Добавил ссылку на Customizer Class, то есть ChartHHmmCustomizer и изменил двойные значения на их представление временной метки, как показано ниже.

public class ChartHHmmCustomizer implements JRChartCustomizer {
    @Override
    public void customize(JFreeChart jfchart, JRChart jasperChart) {

        //Get the category plot
        CategoryPlot plot = (CategoryPlot) jfchart.getPlot();
        double rangeMinValue = plot.getRangeAxis().getRange().getLowerBound();
        double rangeMaxValue = plot.getRangeAxis().getRange().getUpperBound();

        //Create a date axis
        DateAxis yAxis = new DateAxis();
        yAxis.setMinimumDate(HibernateUtil.convertDelphiToDate(rangeMinValue));
        yAxis.setMaximumDate(HibernateUtil.convertDelphiToDate(rangeMaxValue));
        //Override the date format
        yAxis.setDateFormatOverride(new SimpleDateFormat("dd/HH:mm"));
        //Customise tick unit
        yAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MINUTE, 30));
        //Set it to the range axis
        plot.setRangeAxis(yAxis);
    }
}

Я зафиксировал все оси к этой точке, но, как и ожидалось, столбцы не будут отображаться, так как значения (DURATION) значительно превышают определенные значения диапазона MAX & MIN.

Есть ли предпочтительный способ отсюда?Использовать длительности для построения столбцов против каждого оператора в правильном порядке и ширине.Я знаю время начала Shift и интервал для каждой записи.

Если я попытаюсь обновить длительности в plot.getDataset(); create newCategoryDataSet, добавьте ShiftStartTime в него, затем plot.setDataset(newCategoryDataSet);.Прямо сейчас это просто показывает ненормальный результат.Так что любое направление будет полезным.Спасибо

...