Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can someone please provide step-by-step instructions for using jfreechart in an IntelliJ project

I cannot get JFreeChart to work in IntelliJ.

What I have done so far:

  • Using Win 7, IntelliJ 13.1.4 and Java 1.7
  • I am relatively new to IntelliJ
  • Started a new project in IntelliJ which creates the default directories root\out and root\src
  • Added my own directory root\lib
  • Put external libraries in there as .jar and .zip files (jcommon-1.0.23.zip, jfreechart-1.0.19.zip, junit-4.7.jar)
  • In IntelliJ, opened the "Project Structure" dialog (Ctrl+Alt+Shift+S)
  • In the left panel, selected "Modules"
  • In the middle panel selected this project (the only thing that was there)
  • In the right panel, on the "Sources" tab, selected the "src" directory
  • Switched to the "Dependencies" tab
  • Clicked on the green "+" button on the right
  • Selected "2 Library... > Java"
  • Navigated to root\lib and selected one of the .zip / .jar files
  • A "Detected Roots" dialog pops up - I just clicked OK
  • A "Configure Library" dialog pops up - I gave the library a sensible name and clicked OK
  • The library appears in the Dependencies tab with a symbol next to it that looks like some books and is the same symbol as next to the "External Libraries" node in the project tool window (so I'm guessing this is the library symbol)
  • Repeat for the other two libraries
  • In a source file for the project, I have tried typing "import org.jfree.*;" but while typing the "jfree" bit is red and when I hit enter at the end of the line the line disappears.
  • I have also tried typing "JFreeChart jFreeChart = new JFreeChart();" but the JFreeChart is red and when I click on it I don't get the option to import; only create class, interface, enum, etc.
  • Incidentally, running jUnit tests works fine
  • Also incidentally, the "External Libraries" node in the project tool window does show < 1.7 > (i.e. the JDK) but does not show jUnit, jCommon, or jFreeChart.

I have seen similar questions and the answers seem to indicate that what I have done is correct. I have also checked the IntelliJ documentation and that also indicated that what I have done is correct. However, it's clearly not working for me. Maybe I've misunderstood something.

Can someone help me to get JFreeChart working please?

Thanks

EDIT: jUnit was working but now it's not. D'oh!

like image 950
Biggsy Avatar asked Sep 24 '14 10:09

Biggsy


People also ask

How do I manually add an external library to IntelliJ?

From the main menu, select File | Project Structure | Project Settings | Modules. Select the module for which you want to add a library and click Dependencies. button and select Library. In the dialog that opens, select a project or a global library that you want to add to the module.


1 Answers

I've never used IntelliJ before, but I downloaded it and immediately created a new project called JFreeChartExample File -> New Project. Next I clicked File -> Project Structure... and selected the Libraries entry then clicked the + to add both jcommon-1.0.23.jar and jfreechart-1.0.19.jar (which I had on my local file system after unzipping the JFreeChart distribution). Then in the src/ directory I created a new Java file BarChartDemo.java (see later). Now my project looks like this:

enter image description here

BarChartDemo1.java is as follows:

/* ==================
 * BarChartDemo1.java
 * ==================
 *
 * Copyright (c) 2005-2014, Object Refinery Limited.
 * All rights reserved.
 *
 * http://www.jfree.org/jfreechart/index.html
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *   - Neither the name of the Object Refinery Limited nor the
 *     names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED. IN NO EVENT SHALL OBJECT REFINERY LIMITED BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   -;
 *
 * Changes
 * -------
 * 09-Mar-2005 : Version 1 (DG);
 * 11-Mar-2014 : Use new ChartFactory method (DG);
 * 25-Jun-2014 : Update to use real data (DG);
 * 
 */

import java.awt.Color;
import java.awt.Dimension;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * A simple demonstration application showing how to create a bar chart.
 */
public class BarChartDemo extends ApplicationFrame {

    private static final long serialVersionUID = 1L;

    static {
        // set a theme using the new shadow generator feature available in
        // 1.0.14 - for backwards compatibility it is not enabled by default
        ChartFactory.setChartTheme(new StandardChartTheme("JFree/Shadow",
                true));
    }

    /**
     * Creates a new demo instance.
     *
     * @param title  the frame title.
     */
    public BarChartDemo(String title) {
        super(title);
        CategoryDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart, false);
        chartPanel.setBackground(null);
        chartPanel.setFillZoomRectangle(true);
        chartPanel.setMouseWheelEnabled(true);
        chartPanel.setDismissDelay(Integer.MAX_VALUE);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartPanel);
    }

    /**
     * Returns a sample dataset.
     *
     * @return The dataset.
     */
    private static CategoryDataset createDataset() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(7445, "JFreeSVG", "Warm-up");
        dataset.addValue(24448, "Batik", "Warm-up");
        dataset.addValue(4297, "JFreeSVG", "Test");
        dataset.addValue(21022, "Batik", "Test");
        return dataset;
    }

    /**
     * Creates a sample chart.
     *
     * @param dataset  the dataset.
     *
     * @return The chart.
     */
    private static JFreeChart createChart(CategoryDataset dataset) {
        JFreeChart chart = ChartFactory.createBarChart(
                "Performance: JFreeSVG vs Batik", null /* x-axis label*/,
                "Milliseconds" /* y-axis label */, dataset);
        chart.addSubtitle(new TextTitle("Time to generate 1000 charts in SVG "
                + "format (lower bars = better performance)"));
        chart.setBackgroundPaint(null);
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(null);

        // ******************************************************************
        //  More than 150 demo applications are included with the JFreeChart
        //  Developer Guide...for more information, see:
        //
        //  >   http://www.object-refinery.com/jfreechart/guide.html
        //
        // ******************************************************************

        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        chart.getLegend().setFrame(BlockBorder.NONE);
        return chart;
    }

    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {
        BarChartDemo demo = new BarChartDemo("JFreeChart: BarChartDemo1.java");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }

}

I can right click this file in the project and run it to get this:

enter image description here

like image 121
David Gilbert Avatar answered Sep 30 '22 03:09

David Gilbert