title: Creating a line graph based on user input points
body: <p>I have a homework assignment where I must make a program that asks the user for 4 points, and calculates the slope/equation of the line. I want to, once the user hits the calculate button to display a simple line graph graph in the left corner of the window of my program. </p>
  
  <p>How should I go about doing this?  It just needs to plot the y intercept and show the line and I just don't know how to really tackle this. I have the program running fine and everything works great just need to get started on the graph and I don't know how to get started. Any ideas? </p>
  
  <p>If you copy paste my code into JGrasp or whatever IDE you will see what I mean, I just want to add a graph into the mix. </p>
  
  <p>How should I make a graph, and how should I go about putting it in the window so that it changes when I hit calculate?</p>
  
  <p>Here is my code:</p>
  
  <pre><code>public class lineCalculator extends javax.swing.JFrame {
  
  public lineCalculator() {
  initComponents();
  }
  
  @SuppressWarnings("unchecked")
  private void initComponents() {
  
      jLabel1 = new javax.swing.JLabel();
      jLabel2 = new javax.swing.JLabel();
      jLabel3 = new javax.swing.JLabel();
      jLabel4 = new javax.swing.JLabel();
      jLabel5 = new javax.swing.JLabel();
      jSeparator1 = new javax.swing.JSeparator();
      jTextField1 = new javax.swing.JTextField();
      jTextField2 = new javax.swing.JTextField();
      jTextField3 = new javax.swing.JTextField();
      jTextField4 = new javax.swing.JTextField();
      jLabel6 = new javax.swing.JLabel();
      jLabel7 = new javax.swing.JLabel();
      jButton1 = new javax.swing.JButton();
      jTextField5 = new javax.swing.JTextField();
      jTextField6 = new javax.swing.JTextField();
      jLabel8 = new javax.swing.JLabel();
      jTextField7 = new javax.swing.JTextField();
      jLabel9 = new javax.swing.JLabel();
      jTextField8 = new javax.swing.JTextField();
      jLabel10 = new javax.swing.JLabel();
      jTextField9 = new javax.swing.JTextField();
  
      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  
      jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); 
      jLabel1.setText("Line Calculator");
  
      jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel2.setText("X1");
  
      jLabel3.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel3.setText("X2");
  
      jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel4.setText("Y1");
  
      jLabel5.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel5.setText("Y2");
  
      jLabel6.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel6.setText("Slope");
  
      jLabel7.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel7.setText("Distance between points");
  
      jButton1.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jButton1.setText("Calculate");
      jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton1ActionPerformed(evt);
          }
      });
  
      jLabel8.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel8.setText("Angle(radians)");
  
      jLabel9.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel9.setText("Angle(degrees)");
  
      jLabel10.setFont(new java.awt.Font("Tahoma", 1, 12)); 
      jLabel10.setText("Equation of the line");
  
      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      getContentPane().setLayout(layout);
      layout.setHorizontalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(layout.createSequentialGroup()
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                  .addGroup(layout.createSequentialGroup()
                      .addGap(211, 211, 211)
                      .addComponent(jLabel1))
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                          .addGroup(layout.createSequentialGroup()
                              .addGap(39, 39, 39)
                              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                  .addGroup(layout.createSequentialGroup()
                                      .addComponent(jLabel6)
                                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                      .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                                      .addGap(30, 30, 30)
                                      .addComponent(jLabel7)
                                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                      .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))
                                  .addGroup(layout.createSequentialGroup()
                                      .addComponent(jLabel8)
                                      .addGap(18, 18, 18)
                                      .addComponent(jTextField7, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                                      .addGap(39, 39, 39)
                                      .addComponent(jLabel9)
                                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                      .addComponent(jTextField8, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE))))
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(jButton1)
                              .addGap(29, 29, 29)
                              .addComponent(jLabel10)
                              .addGap(18, 18, 18)
                              .addComponent(jTextField9, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE))))
                  .addGroup(layout.createSequentialGroup()
                      .addGap(141, 141, 141)
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                          .addComponent(jLabel2)
                          .addComponent(jLabel3))
                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                          .addComponent(jTextField2)
                          .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE))
                      .addGap(40, 40, 40)
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(jLabel4)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                              .addComponent(jTextField4))
                          .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                              .addComponent(jLabel5)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                              .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE))))
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 509, javax.swing.GroupLayout.PREFERRED_SIZE)))
              .addContainerGap(26, Short.MAX_VALUE))
      );
      layout.setVerticalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(layout.createSequentialGroup()
              .addContainerGap()
              .addComponent(jLabel1)
              .addGap(29, 29, 29)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                  .addComponent(jLabel2)
                  .addComponent(jLabel4)
                  .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                  .addComponent(jLabel3)
                  .addComponent(jLabel5)
                  .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGap(18, 18, 18)
              .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                  .addComponent(jLabel6)
                  .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addComponent(jLabel7)
                  .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGap(33, 33, 33)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                  .addComponent(jTextField7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addComponent(jLabel8)
                  .addComponent(jLabel9)
                  .addComponent(jTextField8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGap(36, 36, 36)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                  .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addComponent(jLabel10)
                  .addComponent(jTextField9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addContainerGap(49, Short.MAX_VALUE))
      );
  
      pack();
  }
  
  
  public boolean isNumeric(String str)
  {
  try
  {
  Double.parseDouble(str);
  }
  catch(Exception e)
  {
  return (false);
  }
  return(true);
  }
  
  public double Round(double val, int plc)
  {
   double pwr = Math.pow(10,plc);
   val = val * pwr;
   double tmp = (int) val;
  
  if( ((int)(val + .5)) == (int) val)
  return (tmp/pwr);
  else
  return((tmp + 1.0)/pwr);
  }
  
  
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  double x1;
  double x2;
  double y1;
  double y2;
  double length_of_x;
  double length_of_y;
  double slope;
  double opposite;
  
  double angle_degrees;
  double angle_radians;
  double y_intercept;
  double distance_between_2_points;
  
  x1 = (double) (Double.parseDouble(jTextField1.getText()));
  x2 = (double) (Double.parseDouble(jTextField2.getText()));
  y1 = (double) (Double.parseDouble(jTextField4.getText()));
  y2 = (double) (Double.parseDouble(jTextField3.getText()));
  
  length_of_x = x2 - x1;
  length_of_y = y2 - y1;
  slope = length_of_y / length_of_x;
  slope = (double) Round(slope,2);
  opposite = y2 - y1;
  distance_between_2_points = Math.sqrt((length_of_x * length_of_x) + (length_of_y * length_of_y));
  distance_between_2_points = (double) Round(distance_between_2_points,2);
  angle_radians = opposite / distance_between_2_points;
  angle_radians = (double) Round(angle_radians,2);
  angle_degrees = angle_radians * (180 / 3.14159);
  angle_degrees = (double) Round(angle_degrees,2);
  y_intercept = (y1)-(angle_radians * x1);
  
  jTextField5.setText(slope + "");
  jTextField6.setText(distance_between_2_points + "");
  jTextField7.setText(angle_radians + "");
  jTextField8.setText(angle_degrees + "");
  jTextField9.setText("Y = " + slope + "" + "X + " + y_intercept + "");
  }
  
  public static void main(String args[]) {
  try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
      if ("Nimbus".equals(info.getName())) {
        javax.swing.UIManager.setLookAndFeel(info.getClassName());
        break;
      }
    }
  } catch (ClassNotFoundException ex) {
    java.util.logging.Logger.getLogger(lineCalculator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  } catch (InstantiationException ex) {
    java.util.logging.Logger.getLogger(lineCalculator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  } catch (IllegalAccessException ex) {
    java.util.logging.Logger.getLogger(lineCalculator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  } catch (javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(lineCalculator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  }
  
  /* Create and display the form */
  java.awt.EventQueue.invokeLater(new Runnable() {
  
    public void run() {
      new lineCalculator().setVisible(true);
    }
  });
  }
  
  private javax.swing.JButton jButton1;
  private javax.swing.JLabel jLabel1;
  private javax.swing.JLabel jLabel10;
  private javax.swing.JLabel jLabel2;
  private javax.swing.JLabel jLabel3;
  private javax.swing.JLabel jLabel4;
  private javax.swing.JLabel jLabel5;
  private javax.swing.JLabel jLabel6;
  private javax.swing.JLabel jLabel7;
  private javax.swing.JLabel jLabel8;
  private javax.swing.JLabel jLabel9;
  private javax.swing.JSeparator jSeparator1;
  private javax.swing.JTextField jTextField1;
  private javax.swing.JTextField jTextField2;
  private javax.swing.JTextField jTextField3;
  private javax.swing.JTextField jTextField4;
  private javax.swing.JTextField jTextField5;
  private javax.swing.JTextField jTextField6;
  private javax.swing.JTextField jTextField7;
  private javax.swing.JTextField jTextField8;
  private javax.swing.JTextField jTextField9;
  }
  </code></pre>