title: Averaging Grades using Java Swing
body: <p>I have a homework assignment that I have been coding away at. I thought I had it done but whenever I want to display the average it shows a list of 0's in the content pane.</p>
  
  <p>Here is the description of the assignment.</p>
  
  <blockquote>
    <p>Write a Swing program that declares an empty array of grades with a
    maximum length of 50. Implement a JOptionPane input box within a while
    loop to allow the user to enter grades. When the user enters the
    sentinel value of -1, that will signal the end of the data input loop.</p>
    
    <p>After the grades are entered, a content pane should display the grades
    sorted from lowest to highest. Write a loop that goes through the
    array looking for elements that are greater than zero (0). Keep a
    running count of those items, and also accumulate them into a grand
    total. Divide the grand total by the number of grades entered to find
    an average, and display the average at the end of the sorted list of
    grades. Use the DecimalFormat method to display the average to 2
    decimal places.</p>
  </blockquote>
  
  <pre><code>/*
      Chapter 7:      Average of grades
      Programmer:     
      Date:           
      Filename:       Averages.java
      Purpose:        To use the Java Swing interface to calculate the average of up to 50 grades.
                      Average is calculated once -1 is entered as a value. The grades are then sorted
                      from lowest to highest and displayed in a content pane which also displayes the average.
  */
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import javax.swing.text.*;
  import java.text.DecimalFormat;
  
  public class Averages extends JFrame
  {
      //construct conponents
      static JLabel title = new JLabel("Average of Grades");
      static JTextPane textPane = new JTextPane();
      static int numberOfGrades = 0;
      static int total = 0;
      static DecimalFormat twoDigits = new DecimalFormat ("##0.00");
  
      //set array
      static int[] grades = new int[50];
  
      //create content pane
      public Container createContentPane()
      {
          //create JTextPane and center panel
          JPanel northPanel = new JPanel();
          northPanel.setLayout(new FlowLayout());
          northPanel.add(title);
  
          JPanel centerPanel = new JPanel();
          textPane = addTextToPane();
          JScrollPane scrollPane = new JScrollPane(textPane);
              scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
              scrollPane.setPreferredSize(new Dimension(500,200));
          centerPanel.add(scrollPane);
  
          //create Container and set attributes
          Container c = getContentPane();
              c.setLayout(new BorderLayout(10,10));
              c.add(northPanel,BorderLayout.NORTH);
              c.add(centerPanel,BorderLayout.CENTER);
  
          return c;
      }
  
      //method to add new text to JTextPane
      public static JTextPane addTextToPane()
      {
          Document doc = textPane.getDocument();
          try
          {
              // clear previous text
              doc.remove(0,doc.getLength());
  
              //insert title
              doc.insertString(0,"Grades\n",textPane.getStyle("large"));
  
              //insert grades and calculate average
              for(int j=0; j&lt;grades.length; j++)
              {
                  doc.insertString(doc.getLength(), grades[j] + "\n", textPane.getStyle("large"));
              }
          }
          catch(BadLocationException ble)
          {
              System.err.println("Couldn't insert text");
          }
  
          return textPane;
      }
  
      //method to sort array
      public void grades(int grdArray[])
      {
          //sort int array
          for (int pass = 1; pass&lt;grdArray.length; pass++)
          {
              for (int element = 0; element&lt;grdArray.length -1; element++)
              {
                  swap(grades, element, element + 1);
  
              }
          }
              addTextToPane();
  
      }
  
  
      //method to swap elements of array
      public void swap(int swapArray[], int first, int second)
      {
          int hold;
          hold = swapArray[first];
          swapArray[first] = swapArray[second];
          swapArray[second] = hold;
      }
  
      //execute method at run time
      public static void main(String args[])
      {
          JFrame.setDefaultLookAndFeelDecorated(true);
          Averages f = new Averages();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  
          //accept first grade
          int integerInput = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a grade (0-100) or -1 to calculate the average"));
  
          //while loop accepts more grades, keeps count, and calulates the total
          int count = 0;
          int[] grades = new int[50];
          int num = 0;
          while (count&lt;50 &amp;&amp; num!= -1)
          {
              num = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a grade (0-100) or -1 to calculate the average" + (count+1)));
              if(num!=-1)
                  grades[count] = num;
              count++;
  
          }
  
          //create content pane
          f.setContentPane(f.createContentPane());
          f.setSize(600,375);
          f.setVisible(true);
  
  
      }
  }
  </code></pre>