Swing JFreeChart, Gantt, Schichtplan

AMiGA

Bekanntes Mitglied
Hallo zusammen,

ich habe diverse Probleme mit JFreeChart, die ich trotz Doku und googeln nicht lösen kann. Ziel ist die Darstellung eines Schichtplans. Auf der x-Achse wird die Zeit dargestellt, auf der y-Achse werden bestimmte Gruppen dargestellt (Zahlenwerte), im (Gantt-)Diagramm soll für jeden Benutzer für jeden geplanten Einsatz ein waagerechter Balken angezeigt werden, siehe angehängtes Bild.

Grundsätzlich ließ sich das Diagramm relativ einfach mit JFreeChart erstellen, exemplarisch hier ein Code-Auszug (nicht übersetzbar):
Code:
        // Create dataset
        TaskSeriesCollection collection = new TaskSeriesCollection();

        for(UMap row : values)
        {
            String usrName = row.getString(SHIFTCAL.T_USRNAME);

            TaskSeries series = collection.getSeries(usrName);
            if(series == null)
            {
                series = new TaskSeries(usrName);
                collection.add(series);
            }
            
            Integer alarmGrp = row.getInteger(SHIFTCAL.T_ALARMGRP);
            String taskName = alarmGrp != null ? alarmGrp + "" : "alle";

            Task task = new Task(taskName, new SimpleTimePeriod(dateFrom, dateTo));
            
            Task parent = series.get(taskName);
            if(parent == null)
            {
                parent = (Task)task.clone();
                parent.addSubtask(task);
                series.add(parent);
            }
            else
            {
                parent.addSubtask(task);
            }
        }

        // Create chart
        JFreeChart chart = ChartFactory.createGanttChart(
            "Schichtplan",  // chart title
            "Alarmgruppe",  // y-axis label
            "Zeitachse",    // x-axis label
            collection,        // data
            true,           // include legend
            true,           // tooltips
            false           // urls
        );

Leider bekomme ich folgende Probleme nicht in den Griff:
(1) Da für einen Bediener (TaskSeries) beliebig viele Einsätze geplant sein können, musste ich mit SubTasks arbeiten, da ansonsten nur ein Task angezeigt würde. Ich kriege es aber nicht hin, dass für die Subtasks Labels innerhalb der Balken angezeigt werden. Wenn ich nur mit Tasks arbeite, funktioniert dies mit dem folgenden Codeschnipsel, mit Subtasks leider nicht:

Code:
        GanttRenderer renderer = (GanttRenderer)plot.getRenderer();
        renderer.setBasePositiveItemLabelPosition(
            new ItemLabelPosition(ItemLabelAnchor.OUTSIDE6, TextAnchor.BOTTOM_CENTER));
        renderer.setBaseItemLabelsVisible(true);

(2) Ich kann die Gruppen (y-Achse, Tasks) nicht sortieren. Obwohl die Tasks in aufsteigender Reihenfolge erzeugt werden, sind die Gruppen in der Darstellung unsortiert.

(3) Die Balken werden vertikal verschoben dargestellt (siehe Bild). Der grüne Balken bei Gruppe 3 ist exakt vertikal zentriert, der rosa Balken bei Gruppe "alle" ist vertikal nach unten verschoben.

Kennt sich jemand mit JFreeChart aus und kann mir eventuell weiterhelfen? Oder gibt es andere Werkzeuge, mit denen solch ein Plan (einfacher) realisierbar ist?

Gruß,
AMiGA
 

Anhänge

  • schichtplan.jpg
    schichtplan.jpg
    39,5 KB · Aufrufe: 56
Zuletzt bearbeitet von einem Moderator:

Harry Kane

Top Contributor
(1) Da für einen Bediener (TaskSeries) beliebig viele Einsätze geplant sein können, musste ich mit SubTasks arbeiten, da ansonsten nur ein Task angezeigt würde. Ich kriege es aber nicht hin, dass für die Subtasks Labels innerhalb der Balken angezeigt werden. Wenn ich nur mit Tasks arbeite, funktioniert dies mit dem folgenden Codeschnipsel, mit Subtasks leider nicht
Die Möglichkeiten, ein category item label darzustellen, sind durch die Methoden im CategoryItemLabelGenerator interface festgelegt, und die erwarten nun mal nur einen row und column index und keinen "sub interval index", den man verwenden könnte, um aus dem dataset subtask-spezifische label zu holen. Wahrscheinlich verzichtet der GanttRenderer deshalb volständig auf das Zeichnen der category item labels, wenn der Task an der durch den row und column index angegebenen Stelle subtasks hat (s. Quellcode auf der JFree Homepage). Ein label string basierend auf dem row und column index wäre nicht eindeutig.
(2) Ich kann die Gruppen (y-Achse, Tasks) nicht sortieren. Obwohl die Tasks in aufsteigender Reihenfolge erzeugt werden, sind die Gruppen in der Darstellung unsortiert.
Meinst du hier die Elemente in der Legend (die aus den row keys ermittelt werden) oder die Beschriftungen der y-Achse bzw. CategoryAxis (die aus den column keys ermittelt werden) ? Wenn dort jeweils "admin" bzw. "alle" am Anfang stünde, wäre das meiner Einung nach schon "sortiert".

(3) Die Balken werden vertikal verschoben dargestellt (siehe Bild). Der grüne Balken bei Gruppe 3 ist exakt vertikal zentriert, der rosa Balken bei Gruppe "alle" ist vertikal nach unten verschoben.
In jedem Bereich der y-Achse reserviert JFreeChart Platz für soviele Balken wie es row keys in dem dataset gibt. Nicht vorhandene Werte an einer bestimmten row/column Kombination werden nicht automatisch rausgeschmissen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JFreeChart Gantt Höhe Tasks AWT, Swing, JavaFX & SWT 1
L Gantt Chart - JFreeChart AWT, Swing, JavaFX & SWT 5
C JFreeChart X-Achse Werte skalieren, begrenzen, zoomen AWT, Swing, JavaFX & SWT 5
H JFreeChart BarDiagramm Balken der gleichen Serie unterschiedliche Farbe zuordnen AWT, Swing, JavaFX & SWT 2
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H JFreeChart Charts überlagern AWT, Swing, JavaFX & SWT 2
C JFreeChart x-Achse mit absteigenden Werten AWT, Swing, JavaFX & SWT 1
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
N jFreeChart einzelne Punkte anwählen und Formatieren AWT, Swing, JavaFX & SWT 0
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
V JFreechart: In Linechart Linien einzeichnen und Bereiche färben AWT, Swing, JavaFX & SWT 4
M In JFreeChart Geraden erzeugen AWT, Swing, JavaFX & SWT 11
M JFreechart Zoom out AWT, Swing, JavaFX & SWT 2
M Swing JFreechart X-Achse Tick auslesen AWT, Swing, JavaFX & SWT 13
M Swing JFreechart zoom x-achse neue Werte AWT, Swing, JavaFX & SWT 4
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
Z Diagramm mit jfreechart quadratisch erstellen AWT, Swing, JavaFX & SWT 1
D JFreeChart range der Y Achse verändern. AWT, Swing, JavaFX & SWT 1
G JFreeChart - SetSeriesColor Problem AWT, Swing, JavaFX & SWT 3
K 2D-Grafik JFreeChart plot.setBackgroundImage() AWT, Swing, JavaFX & SWT 1
K 2D-Grafik JFreeChart DateAxis AWT, Swing, JavaFX & SWT 9
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
Farbtopf Live update JFreeChart AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
D JFreeChart - aktuelle code beispiele AWT, Swing, JavaFX & SWT 11
M JFreeChart in ein File schreiben (bzw. JFrame in ein File Schreiben) AWT, Swing, JavaFX & SWT 2
A JFreeChart in GUI AWT, Swing, JavaFX & SWT 3
E JFreeChart: Timeseries-Chart und Area-Chart "überlappen" lassen AWT, Swing, JavaFX & SWT 6
B JFreeChart-Erweiterungen AWT, Swing, JavaFX & SWT 4
E JFreeChart in einer dynamischen Aufzeichnung neue Serien hinzufügen? AWT, Swing, JavaFX & SWT 7
I XML - JFreeChart AWT, Swing, JavaFX & SWT 15
N Dynamische JFreechart updated UI nicht AWT, Swing, JavaFX & SWT 5
S JFreeChart - Schriftgröße der Legende AWT, Swing, JavaFX & SWT 2
O Swing JFreechart subtitle formatieren AWT, Swing, JavaFX & SWT 3
N JFreeChart: Plot soll mit skalieren AWT, Swing, JavaFX & SWT 5
R JFreeChart Plots AWT, Swing, JavaFX & SWT 6
J JFreechart spezielles Balkendiagramm AWT, Swing, JavaFX & SWT 2
R JFreeChart: nur jeden n-ten Wert auf der X-Achse anzeigen AWT, Swing, JavaFX & SWT 5
R JFreeChart aktualisieren wenn sich die Ausgangsdaten ändern AWT, Swing, JavaFX & SWT 8
T JFreeChart Linine einzeichnen AWT, Swing, JavaFX & SWT 2
M JFreeChart Ausrichtung der Balken AWT, Swing, JavaFX & SWT 2
R jFreeChart in eine NetBeans Projekt integrieren AWT, Swing, JavaFX & SWT 24
D JFreeChart Breite (width) ändern AWT, Swing, JavaFX & SWT 6
R JFreeChart Skalierung zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
F Wie lade ich eine CategoryDataset aus XML ins JFreeChart? AWT, Swing, JavaFX & SWT 9
J JFreeChart - mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
A JFreeChart: 2 X-Achsen für ein Dataset AWT, Swing, JavaFX & SWT 2
T JFreeChart export Problem AWT, Swing, JavaFX & SWT 4
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
D JFreechart maximalangezeigter Wertebereich AWT, Swing, JavaFX & SWT 3
B AWT [JFreeChart] malt nicht so wie ich will :-( AWT, Swing, JavaFX & SWT 2
B JFreeChart Balkendiagramm ActionEvent AWT, Swing, JavaFX & SWT 2
L Labels sichtbar - JFreeChart AWT, Swing, JavaFX & SWT 5
A Schachbrettartiges Diagramm mit JFreeChart AWT, Swing, JavaFX & SWT 4
E JFreeChart AWT, Swing, JavaFX & SWT 2
K JFreeChart im JScrollPane ausblenden AWT, Swing, JavaFX & SWT 2
L JFreeChart Labelrotation AWT, Swing, JavaFX & SWT 2
L JFreeChart Farbe von Balken AWT, Swing, JavaFX & SWT 5
L JFreeChart Balkenanordnung AWT, Swing, JavaFX & SWT 10
L JFreeChart Achsenskalierung AWT, Swing, JavaFX & SWT 4
L JFreeChart - Dataset befüllen AWT, Swing, JavaFX & SWT 2
L JFreeChart - Line Shapes AWT, Swing, JavaFX & SWT 15
N JFreeChart - Basics AWT, Swing, JavaFX & SWT 2
L NullPointerException JFreeChart AWT, Swing, JavaFX & SWT 10
L JFreeChart - Legende vertikal AWT, Swing, JavaFX & SWT 5
L JFreeChart - Linienstärke einstellen AWT, Swing, JavaFX & SWT 2
L JFreeChart Einstellungen AWT, Swing, JavaFX & SWT 22
L JFreeChart - Gitterfarbe schwarz AWT, Swing, JavaFX & SWT 4
L JFreeChart StackedBar + Line-Chart kombinieren AWT, Swing, JavaFX & SWT 4
L JFreeChart - Performance bei PNG-Erstellung AWT, Swing, JavaFX & SWT 5
L JFreeChart - Legende beliebig positionieren AWT, Swing, JavaFX & SWT 16
G JFreechart Balken einfärben AWT, Swing, JavaFX & SWT 6
F Probleme mit NumberAxis bei JFreeChart AWT, Swing, JavaFX & SWT 5
G jfreechart (Diagramm speichern mit ein vorgegebenen Namen) AWT, Swing, JavaFX & SWT 6
S JFreeChart neu zeichnen sich das Datenset geändert hat. AWT, Swing, JavaFX & SWT 4
K JFreeChart Eigentschaften des Charts ändern AWT, Swing, JavaFX & SWT 8
G JFreeChart und das updaten AWT, Swing, JavaFX & SWT 7
G Ausser Jfreechart, Chart Programme? AWT, Swing, JavaFX & SWT 11
S Dimensionen JFreeChart AWT, Swing, JavaFX & SWT 5
S JFreeChart Stufendiagramm AWT, Swing, JavaFX & SWT 2
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
K JFreeChart: Platz zwischen Balken AWT, Swing, JavaFX & SWT 3
M JFreeChart Handbuch? AWT, Swing, JavaFX & SWT 8
P JFreeChart - TimeSeriesDiagram AWT, Swing, JavaFX & SWT 2
M Gantt Diagramm mit Swing - Designfragen AWT, Swing, JavaFX & SWT 5
J Gantt-/Balken-/Netzplan - Diagramme AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben