Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Ik heb hier in de main klasse een nieuwe grafiek gemaakt met de titel 'Rotations per Second' om de rotatiesnelheid van de wielen weer te geven. Vervolgens wordt worden er met wat vaste data (r.25 tot en met r.52) meerdere lijnen getekend in een grafiek.

Code Block
languagejava
themeEclipse
firstline1
titleMain.java
linenumberstrue
public class JFreeChartTest {
    public static void main(String[] args) {
        LineChart chart = new LineChart(
                "Rotations per Second"
        );
        BarChart barChart = new BarChart(
                "Oil Pressure Graph"
        );
        
        chart.pack();
        chart.setVisible(true);
        barChart.pack();
        barChart.setVisible(true);
    }
}
Code Block
languagejava
themeEclipse
firstline1
titleLineChart.java
linenumberstrue
public class LineChart extends ApplicationFrame {
    public LineChart(String title) {
        super(title);

        JFreeChart xyLineChart = ChartFactory.createXYLineChart(
                "Wheelspeed Graph",
                "Time",
                "Rotations per Minute",
                createDataset()
        );
        ChartPanel chartPanel = new ChartPanel( xyLineChart);
        chartPanel.setPreferredSize( new java.awt.Dimension(500, 500));
        final XYPlot xyPlot = xyLineChart.getXYPlot();

        XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
        renderer.setSeriesPaint(0, Color.decode("#AA0000"));
        renderer.setSeriesPaint(1, Color.decode("#0000AA"));
        renderer.setSeriesPaint(2, Color.decode("#00AA00"));
        renderer.setUseFillPaint(true);

        xyPlot.setRenderer(renderer);
        setContentPane(chartPanel);
    }

    private XYDataset createDataset() {
        final XYSeries rotations = new XYSeries("Rotations");
        rotations.add(0, 0);
        rotations.add(1, 1);
        rotations.add(2, 5);
        rotations.add(3, 14);
        rotations.add(4, 18);

        final XYSeries rotationsCar1 = new XYSeries("RotationsCar1");
        rotationsCar1.add(0, 0);
        rotationsCar1.add(1, 1.5);
        rotationsCar1.add(2, 7);
        rotationsCar1.add(3, 19);
        rotationsCar1.add(4, 21);

        final XYSeries rotationsCar2 = new XYSeries("RotationsCar2");
        rotationsCar2.add(0, 0);
        rotationsCar2.add(1, 3.5);
        rotationsCar2.add(2, 6);
        rotationsCar2.add(3, 7.8);
        rotationsCar2.add(4, 10);

        final XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(rotations);
        dataset.addSeries(rotationsCar1);
        dataset.addSeries(rotationsCar2);
        return dataset;
    }

}

Image Added

Wheelspeed Grafiek

Het resultaat ziet er veelbelovend uit en lijkt op iets waar we meer mee kunnen. Na wat rond te zoeken op Google en StackOverflow naar mogelijkheden om een grafiek in real-time te kunnen updaten, kwam ik deze post tegen: https://stackoverflow.com/questions/21299096/jfreechart-how-to-show-real-time-on-the-x-axis-of-a-timeseries-chart, waar dit erg netjes uitgelegd werd. Het is dus inderdaad mogelijk om een JFreeChart real-time grafiek te maken zonder al te veel moeite. 

Voor JFreeChart zit de grootste moeite in het maken van een goede database-connectie die er voor zorgt dat alle gegevens op een goede manier in de grafiek terecht komen. Daarnaast is JFreeChart niet makkelijk om te zetten naar een webapplicatie, wat voor onze opdracht wellicht een probleem kan vormen. JfreeChart is dus een veelbelovende API en een van de topkandidaten voor ons.


Google charts:

Google charts een een open API die gemaakt is door Google. Doordat het door zo'n groot bedrijf is gemaakt is de support en mogelijke oplossingen voor vragen zeer groot. Een nadeel van Google charts is dat het alleen te gebruiken is op een webpagina en niet in een Java applicatie. Er was wel een implementatie voor Java maar die is het laatst geüpdatet 14 jaar geleden, wij hebben er voor gekozen om deze dan daarom ook niet te gebruiken.

...