Wednesday, 3 June 2020

jFreechart Gui dengan database

jFreechart merupakan framework / library yang digunakan untuk menampilkan data ke dalam sebuah chart.
Kali ini kita akan membuat program dengan jFreechart dengan bahasa java dan menggunakan IDE Netbeans .

Tahap awal ialah membuat database :
saya membuat dbgraf dengan 2 tabel yaitu :
1.tablebar
2.tablepie

dengan masing - masing tabel memiliki kolom nilai1,2,3



di lanjutkan membuat class koneksi untuk menghubungkan aplikasi dengan database seperti berikut
jangan lupa untuk meng import file mysql-connector-java-5.1.23-bin.jar
yang berisi library yg di butuhkan class koneksi


untuk sytax lengkap nya 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author hp
 */
public class koneksi {
    private static Connection koneksi;
    public static Connection getkoneksi(){
        if (koneksi==null){
            try{
              String url = new String();
              String user = new String();
              String password = new String();
              url ="jdbc:mysql://localhost/DBgraf";
              user="root";
              password="";
              DriverManager.registerDriver(new com.mysql.jdbc.Driver());
              koneksi =(Connection)DriverManager.getConnection(url,user,password);
            
        }catch(SQLException t){
            System.out.println("Koneksi error");
        }
    }
    return koneksi;
}

setelah itu membuat class javaGrafikInput yang akan menampilkan chartpie 
jangan lupa untuk terlebih dahulu mengimport file jfreechart.jar ke library yang berisi library yang di butuhkan oleh class javaGrafikInput


syntax lengkap nya 

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;


/**
 *
 * @author hp
 */
public class PieGrafikInput extends JFrame {
    double n1_eramadhan=0,n2_eramadhan=0, n3_eramadhan=0;
    public void setNilai(String nilai1, String nilai2, String nilai3){
    try {
    n1_eramadhan = Double.parseDouble(nilai1);
    } catch (NumberFormatException ex){}
    try {
    n2_eramadhan = Double.parseDouble(nilai2);
    } catch (NumberFormatException ex){}
    try {
    n3_eramadhan = Double.parseDouble(nilai3);
    } catch (NumberFormatException ex){}
    
    this.setSize(600, 400);
    this.setTitle("Diagram PIE");
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    PieDataset dataset = buildData();
    JFreeChart chart = buildChart(dataset, "Data Dari Grafik Input");
    ChartPanel pieChart = new ChartPanel(chart);
    this.setContentPane(pieChart);
    }
    
    private JFreeChart buildChart(PieDataset dataset, String judul){
        JFreeChart chart = ChartFactory.createPieChart3D(judul, dataset,true, true, false);
        PiePlot3D plot = (PiePlot3D) chart.getPlot();
        plot.setStartAngle(290);
        plot.setDirection(Rotation.CLOCKWISE);
        plot.setForegroundAlpha(0.5f);
        return chart;
    }
    
    private PieDataset buildData(){
    DefaultPieDataset dataSet = new DefaultPieDataset();
    dataSet.setValue("Nilai 1", n1_eramadhan);
    dataSet.setValue("Nilai 2", n2_eramadhan);
    dataSet.setValue("Nilai 3", n3_eramadhan);
    
    return dataSet;
    }
    
    public static void main(String[] args) {
    try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }catch (Exception e){
    }
    
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            new PieGrafikInput().setVisible(true);
    }
    });
  }

lalu membuat jFrameform untuk input data chart pie dan menampilkan nya
untuk desain jform nya seperti berikut


pada gambar terdapat area yang di beri tanda kotak merah merupakan letak jLabel4, 5, dan 6
pada program ini saat tombol grafik di tekan maka akan mengambil nilai dari database Mysql dan menaruh nya di jlabel tersebut lalu nilai di teruskan ke javaGrafikInput.

syntax pada button simpan dapat di lihat pada gambar berikut


saat tombol di simpan akan mengirim nilai di jTextField ke tableBar dan memberi notif pop up berhasil lalu menghapus inputan yang ada di jTextfield 

sedangkan syntax button grafik dapat di lihat pada gambar berikut


saat tombol grafik di tekan maka akan mengambil nilai dari database Mysql dan menaruh nya di jlabel tersebut lalu nilai di teruskan ke javaGrafikInput



untuk class BarGrafikInput proses pembuatan nya sama hanya syntax nya yang berbeda
berikut syntax nya

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

/**
 *
 * @author hp
 */
public class BarGrafikInput extends JFrame {
    //terima nilai dari jframe dan inisialisasi bar chart
    double n1_eramadhan=0, n2_eramadhan=0, n3_eramadhan=0;
    public void setNilai (String Nilai1, String Nilai2, String Nilai3){
    try{
     n1_eramadhan = Double.parseDouble(Nilai1);
    }catch(NumberFormatException ex){}
    try{
     n2_eramadhan = Double.parseDouble(Nilai2);
    }catch(NumberFormatException ex){} 
    try{
     n3_eramadhan = Double.parseDouble(Nilai3);
    }catch(NumberFormatException ex){}
    this.setSize(600, 400);
    this.setTitle("Diagram Bar");
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final CategoryDataset dataset = createDataset();
    final JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(600, 400));
    setContentPane(chartPanel);
}
    // menambahkan nilai bar chart tiap nilai
    private CategoryDataset createDataset() {
    final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(n1_eramadhan, "Nilai 1" , "");
    dataset.addValue(n2_eramadhan, "Nilai 2", "");
    dataset.addValue(n3_eramadhan, "Nilai 3 ", "");
    return dataset;
    }
    
    private JFreeChart createChart(final CategoryDataset dataset) {
    JFreeChart chart = ChartFactory.createBarChart3D("Data Grafik ", "", "",
    dataset, PlotOrientation.VERTICAL, true, true, false);
    chart.setBackgroundPaint(new Color(135,206,250));
    CategoryPlot plot = (CategoryPlot) chart.getPlot();
    plot.setNoDataMessage("Data Not Available");
    CategoryAxis axis = plot.getDomainAxis();
    axis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
    CategoryItemRenderer renderer = plot.getRenderer();
    renderer.setBaseItemLabelsVisible(true);
    BarRenderer barRenderer = (BarRenderer) renderer;
    barRenderer.setItemMargin(0.1D);
    barRenderer.setDrawBarOutline(true);
    return chart;
    }
    
    public static void main(String[] args) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }
    SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
    new BarGrafikInput().setVisible(true);
        }
      });
    } 

dan sytax pada jFrame button simpan


selanjutnya untuk button grafik


dan yang terakhir merupakan hasil run Program PieChart dan BarChart



ada beberapa kekurangan di program yaitu data yang telah di input hanya dapat di hapus / edit melalui mysql  sedangkan melalui aplikasi tidak bisa , mungkin kedapan nya dapat di tambahkan metode CRUD pada aplikasi yang lebih lengkap

Program input data kasus penyebaran penyakit Covid-19

Program yang dimaksud di buat denga bahasa java dengan menggunakan IDE Netbeans 

dengan menggunakan library java jfreechart

data hasil input akan menampilkan diagram piechart


hasil run aplikasi  akan tampil seperti berikut:


data di input pada textfield yg tersedia lalu klik simpan maka data yang telah di input akan 

di tampilkan kembali, lalu untuk memunculkan piechart dengan klik button grafik maka 

grafik akan di muncul kan adapun cara lengkap pembuatan aplikasi nya dalam bentuk 

pdf


Langkah Pembuatan GUI jFreechart sederhana di netbeans



disini saya menganggap bagi yang membaca sudah memahami apa itu java dan IDE Netbeans Tahap awal adalah membuat project baru klik new project , lalu pilih java Application , lalu klik next, nama project bebas 


lalu membuat jframe form dengan nama home
jFramehome berupa GUI untuk memanggil class java Piechart 


lalu mendesain tampilan GUI jFrame home dengan menambahkan menu bar dari pallet 


setelah itu menambah kan menu item pada menu bar  


di lanjutkan menambahkan event action pada menu item


pada action menu item di tambah kan sytax seperti berikut :

JavaPieChart subPie=new JavaPieChart();
        jDesktopPane1.add(subPie);
        subPie.setVisible(true);

untuk memanggil javaPieChart class

membuat java class baru dengan nama javaPieChart

 

ada pun sytax pada class javaPieChart sperti brikut :

//library yang di butuhkan
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

/**
 *
 * @author eramadhan
 */
public class JavaPieChart extends JInternalFrame  {
    
    public JavaPieChart() {
    //inisialisasiframe
    this.setSize(600, 400);
    this.setTitle("Diagram PIE");
    //this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//membuat diagram/chart jfreechart
//Membuat/mengkalkulasikan data char
PieDataset dataset = buildData();
// Membuat chart berdasarkan data yang ada pada dataset
JFreeChart chart = buildChart(dataset, "Browser yang YangDIgunakan");
// Memasukan chart pada panel agar lebih mudah ditampilkan pada komponen swing containe
ChartPanel pieChart= new ChartPanel(chart);
//memasukan chart panel kedalam jpanel
this.setContentPane(pieChart);
   }


 private JFreeChart buildChart(PieDataset dataset, String judul) {
    JFreeChart chart = ChartFactory.createPieChart3D(judul, // JudulChart
    dataset, // data chart yang akanditampilkan
    true, // jikaya, makaakanlegend chart/diagram ditampilkan
    true,
    false);
    PiePlot3D plot = (PiePlot3D) chart.getPlot();
    plot.setStartAngle(290);
    plot.setDirection(Rotation.CLOCKWISE);
    plot.setForegroundAlpha(0.5f);
    return chart;
    }

    private PieDataset buildData() {
    DefaultPieDataset dataSet= new DefaultPieDataset();
    dataSet.setValue("Google Chrome", 45);
    dataSet.setValue("MozilaFirefox", 30);
    dataSet.setValue("Internet Explorer", 15);
    dataSet.setValue("Browser Lainnya", 10);
    return dataSet;
}
    public static void main(String[] args) {
     try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
    }
    SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
    new JavaPieChart().setVisible(true);
        }
    });
    }
    
}

lalu jalan kan aplikasi dengan short cut shift+f6 pada jFrame home ,jika tidak ada error maka aplikasi akan tampil seperti berikut 


setelah itu klik di menubar untuk memanggil atau menampilkan javaPieChart class


hasil nya seperti berikut :