Selasa, 08 Mei 2012

Menampilkan Chart pada Java NetBeans dengan JFreeChart


Chart dengan JFreeChart

Pada Java NetBeans tidak disediakan komponen Chart, tetapi dapat dibuat menggunakan berbagai library yang gratis di Internet, salah satu library yang paling populer adalah JfreeChart. Library ini dapat didownload gratis dari internet. Library tersebut dapat dimasukkan pada project dengan cara yang dilakukan sama dengan ketika menambahkan library iReport dan lainnya, yaitu  pada Project Tree, pilih Libraries klik kanan Pilih Add JAR/Folder.



Setelah muncul dialog Add JAR/Folder, kemudian pilih file-file library JFreeChart yaitu file jfreechart-1.0.11.jar dan jcommon-1.0.14.jar. Klik OK.



Untuk memasukkan data yang akan ditampilkan JFreeChart harus dilakukan dari kode program. Berikut ini contoh kode program yang dapat dipakai untuk mengolah JFreeChart secara dinamis dari kode program, baik untuk Chart yang berbentuk Pie, Line, Bar, dll.

/*
 * FChart.java
 *
 * Created on October 28, 2008, 10:31 PM
 */
package my.all;
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.general.DefaultPieDataset;
import java.io.File;
import javax.swing.ImageIcon;
import java.util.Calendar;
/**
 *
 * @author  Amijaya
 */
public class FChart extends javax.swing.JFrame {

    /** Creates new form FChart */
    public FChart() {
        initComponents();
        generateChart();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {
...
    }// </editor-fold>                       
private void cTypeActionPerformed(java.awt.event.ActionEvent evt) {                                     
// TODO add your handling code here:
    generateChart();
}                                     
private void generateChart() {
    DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); 
    int[] tahun = {2004,2005,2006,2007,2008}; 
    int[] MS = {100,120,140,150,155}; 
    int[] Oracle = {110,120,120,150,160}; 
    int[] Google = {80,85,100,140,175}; 
   
    for (int i=0; i<tahun.length; i++) { 
        String thn = String.valueOf(tahun[i]); 
        dataSet.addValue(MS[i], "MS", thn); 
        dataSet.addValue(Oracle[i], "Oracle", thn); 
        dataSet.addValue(Google[i], "Google", thn); 
    }     
   
    DefaultPieDataset pieDataSet = new DefaultPieDataset();
    pieDataSet.setValue("One", new Double(43.2));
    pieDataSet.setValue("Two", new Double(10.0));
    pieDataSet.setValue("Three", new Double(27.5));
    pieDataSet.setValue("Four", new Double(17.5));
    pieDataSet.setValue("Five", new Double(11.0));
    pieDataSet.setValue("Six", new Double(19.4));

    JFreeChart chart = null; 

    if (cType.getSelectedIndex() == 0) {
        chart = ChartFactory.createLineChart("Line", "Tahun", "Hasil", dataSet, PlotOrientation.VERTICAL, true, true, true); 
    } else if (cType.getSelectedIndex() == 1) {
        chart = ChartFactory.createBarChart("Bar", "Tahun", "Hasil", dataSet, PlotOrientation.VERTICAL, true, true, true);     
    } else if (cType.getSelectedIndex() == 2) {
        chart = ChartFactory.createPieChart("Pie", pieDataSet, true, true, false);     
    }  
  
    try {
    Calendar rightNow = Calendar.getInstance();
//    fLahir.setText(String.valueOf(rightNow.get(rightNow.DATE)) + "/" + String.valueOf(rightNow.get(rightNow.MONTH)) + "/" + String.valueOf(rightNow.get(rightNow.YEAR)));
    String fName = "chart" + String.valueOf(rightNow.getTimeInMillis()) + ".jpg";
    ChartUtilities.saveChartAsJPEG(new File(fName), chart, 500, 300);
    lChart.setIcon(null);
    lChart.setIcon(new ImageIcon(fName));
    } catch (Exception e){ System.out.println(e);}
}

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FChart().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JComboBox cType;
    private javax.swing.JLabel lChart;
    // End of variables declaration                  

}

Setelah dijalankan, hasilnya dapat dilihat pada tampilan berikut ini :