Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package view.statistics; import controller.statistics.Predictions; import controller.issueing.SampleDetailsController; import com.toedter.components.JSpinField; import java.awt.Color; import java.awt.Component; import java.awt.GridLayout; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; /** * * @author ruchiranga */ public class RequestStatsAndPrediction extends javax.swing.JInternalFrame { SampleDetailsController sdcontroller; /** * Creates new form PredictRequests */ public RequestStatsAndPrediction() throws FileNotFoundException, IOException { initComponents(); FileInputStream imgStream = null; File imgfile = new File("..\\BBMS\\src\\images\\drop.png"); imgStream = new FileInputStream(imgfile); BufferedImage bi = ImageIO.read(imgStream); ImageIcon myImg = new ImageIcon(bi); this.setFrameIcon(myImg); setTitle("Request Statistics and Prediction"); sdcontroller = new SampleDetailsController(); Calendar calendar = Calendar.getInstance(); yearChooser.setStartYear(calendar.get(Calendar.YEAR)); monthChooser.setMonth(calendar.get(calendar.MONTH) + 1); int year = yearChooser.getYear(); int month = monthChooser.getMonth() + 1; int currentYear = Calendar.getInstance().get(Calendar.YEAR); int currentMonth = Calendar.getInstance().get(Calendar.MONTH) + 1; int data[][] = null; try { data = sdcontroller.getYearlyRequestCountsOf(month); } catch (ClassNotFoundException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } if (year >= currentYear && month >= currentMonth) { try { predictText.setText(Predictions.getPredictedRequestsOf(year, month) + ""); } catch (ClassNotFoundException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } } else { JOptionPane.showMessageDialog(this, "Predictions available only for future months. Only the graph will be drawn", "Error", JOptionPane.ERROR_MESSAGE); predictText.setText("Invalid input!"); } DefaultCategoryDataset dataset = new DefaultCategoryDataset(); if (data != null) { for (int i = 0; i < data[0].length; i++) { dataset.setValue(data[1][i], "Bla bla bla", data[0][i] + ""); } } JFreeChart chart = ChartFactory.createLineChart3D( "Yearly Blood Request Count For The Month of " + getMontName(month + ""), "Year", "Request Count", dataset, PlotOrientation.VERTICAL, false, true, false); chart.setBackgroundPaint(Color.PINK); chart.getTitle().setPaint(Color.RED); CategoryPlot p = chart.getCategoryPlot(); p.setRangeGridlinePaint(Color.BLUE); ChartPanel panel = new ChartPanel(chart); panel.setPreferredSize(new java.awt.Dimension(200, 350)); chartAreaPanel.setLayout(new GridLayout()); chartAreaPanel.removeAll(); chartAreaPanel.revalidate(); chartAreaPanel.add(panel); chartAreaPanel.repaint(); this.repaint(); } /** * 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">//GEN-BEGIN:initComponents private void initComponents() { jPanel6 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); chartAreaPanel = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); monthChooser = new com.toedter.calendar.JMonthChooser(); yearChooser = new com.toedter.calendar.JYearChooser(); jLabel1 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); predictText = new javax.swing.JTextField(); predictButton = new javax.swing.JButton(); jPanel6.setLayout(null); jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel5.setForeground(new java.awt.Color(255, 255, 255)); jLabel5.setText("Request Statistics and Prediction"); jPanel6.add(jLabel5); jLabel5.setBounds(348, 20, 310, 30); jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/FormHeader.png"))); // NOI18N jLabel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255), 2)); jPanel6.add(jLabel2); jLabel2.setBounds(0, 0, 940, 73); jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255), 2)); javax.swing.GroupLayout chartAreaPanelLayout = new javax.swing.GroupLayout(chartAreaPanel); chartAreaPanel.setLayout(chartAreaPanelLayout); chartAreaPanelLayout.setHorizontalGroup(chartAreaPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 0, Short.MAX_VALUE)); chartAreaPanelLayout.setVerticalGroup(chartAreaPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 394, Short.MAX_VALUE)); monthChooser.setPreferredSize(new java.awt.Dimension(110, 20)); monthChooser.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { monthChooserPropertyChange(evt); } }); yearChooser.setMinimum(Calendar.getInstance().MONTH + 1); yearChooser.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { yearChooserPropertyChange(evt); } }); jLabel1.setText("Year"); jLabel3.setText("Month"); jLabel4.setText("Expected request count :"); predictButton.setText("Predict"); predictButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { predictButtonActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel1).addGap(18, 18, 18) .addComponent(yearChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18).addComponent(jLabel3).addGap(18, 18, 18).addComponent( monthChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel4).addGap(18, 18, 18) .addComponent(predictText, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(18, 18, 18).addComponent(predictButton).addContainerGap(599, Short.MAX_VALUE))); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addGap(14, 14, 14).addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(monthChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3) .addComponent(yearChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1).addComponent(predictButton)).addGap(18, 18, 18) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4).addComponent(predictText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(chartAreaPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(170, 170, 170))))); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap() .addComponent(chartAreaPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(18, 18, 18) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(20, 20, 20))); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addGap(105, 105, 105) .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, 950, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(96, Short.MAX_VALUE)))); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap(80, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(541, Short.MAX_VALUE)))); pack(); }// </editor-fold>//GEN-END:initComponents private void monthChooserPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_monthChooserPropertyChange // }//GEN-LAST:event_monthChooserPropertyChange private void yearChooserPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_yearChooserPropertyChange }//GEN-LAST:event_yearChooserPropertyChange private void predictButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_predictButtonActionPerformed int year = yearChooser.getYear(); int month = monthChooser.getMonth() + 1; int currentYear = Calendar.getInstance().get(Calendar.YEAR); int currentMonth = Calendar.getInstance().get(Calendar.MONTH) + 1; int data[][] = null; try { data = sdcontroller.getYearlyRequestCountsOf(month); } catch (ClassNotFoundException ex) { } catch (SQLException ex) { } if (year >= currentYear && month >= currentMonth) { try { predictText.setText(Predictions.getPredictedRequestsOf(year, month) + ""); } catch (ClassNotFoundException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } } else { JOptionPane.showMessageDialog(this, "Predictions available only for future months. Only the graph will be drawn", "Error", JOptionPane.ERROR_MESSAGE); predictText.setText("Invalid input!"); } //if (data != null) { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); if (data != null) { for (int i = 0; i < data[0].length; i++) { dataset.setValue(data[1][i], "Year", data[0][i] + ""); } } JFreeChart chart = ChartFactory.createLineChart3D( "Yearly Blood Request Count For The Month of " + getMontName(month + ""), "Year", "Request Count", dataset, PlotOrientation.VERTICAL, false, true, false); chart.setBackgroundPaint(Color.PINK); chart.getTitle().setPaint(Color.RED); CategoryPlot p = chart.getCategoryPlot(); p.setRangeGridlinePaint(Color.BLUE); ChartPanel panel = new ChartPanel(chart); panel.setPreferredSize(new java.awt.Dimension(200, 350)); chartAreaPanel.setLayout(new GridLayout()); chartAreaPanel.removeAll(); chartAreaPanel.revalidate(); chartAreaPanel.add(panel); chartAreaPanel.repaint(); this.repaint(); //} }//GEN-LAST:event_predictButtonActionPerformed private String getMontName(String monthNo) { SimpleDateFormat monthParse = new SimpleDateFormat("MM"); SimpleDateFormat monthDisplay = new SimpleDateFormat("MMMM"); String ret = null; try { ret = monthDisplay.format(monthParse.parse(monthNo)); } catch (ParseException ex) { Logger.getLogger(RequestStatsAndPrediction.class.getName()).log(Level.SEVERE, null, ex); } return ret; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel chartAreaPanel; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel6; private com.toedter.calendar.JMonthChooser monthChooser; private javax.swing.JButton predictButton; private javax.swing.JTextField predictText; private com.toedter.calendar.JYearChooser yearChooser; // End of variables declaration//GEN-END:variables }