This program compiles, however, it only lets me insert one grade before the window closes and it doesn't enter the sort or the calculation of the average grade. I am not sure where I am going wrong, any help would be greatly appreciated.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.text.DecimalFormat;
public class Average extends JFrame implements ActionListener
{
JTextPane gradesPane = new JTextPane();
JButton enterGrades = new JButton("Enter Grades");
String grades[] = new String[50];
int SENTINEL = 0;
DecimalFormat formatter = new DecimalFormat("######.##");
public Average()
{
super("Grade Average");
}
//create the menu system
public JMenuBar createMenuBar()
{
//create an instance of the menu
JMenuBar mnuBar = new JMenuBar();
setJMenuBar(mnuBar);
//construct and populate the File menu
JMenu mnuFile = new JMenu("File", true);
mnuFile.setMnemonic(KeyEvent.VK_F);
mnuFile.setDisplayedMnemonicIndex(0);
mnuBar.add(mnuFile);
JMenuItem mnuFileExit = new JMenuItem("Exit");
mnuFileExit.setMnemonic(KeyEvent.VK_X);
mnuFileExit.setDisplayedMnemonicIndex(1);
mnuFile.add(mnuFileExit);
mnuFileExit.setActionCommand("Exit");
mnuFileExit.addActionListener(this);
return mnuBar;
}
//create the content pane
public Container createContentPane()
{
//construct and populate the north panel
JPanel northPanel = new JPanel();
northPanel.setLayout(new FlowLayout());
northPanel.add(enterGrades);
enterGrades.addActionListener(this);
//construct and populate the central panel
JPanel centralPanel = new JPanel();
centralPanel.setLayout(new FlowLayout());
centralPanel.add(gradesPane);
JScrollPane scrollPane = new JScrollPane(gradesPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(500,200));
centralPanel.add(scrollPane);
gradesPane.setEditable(false);
//create Container and set attributes
Container c = getContentPane();
c.setLayout(new BorderLayout(10,10));
c.add(northPanel, BorderLayout.NORTH);
c.add(centralPanel, BorderLayout.CENTER);
return c;
}
//event to process user clicks
public void actionPerformed(ActionEvent e)
{
String arg = e.getActionCommand();
//user clicks the enter by combo box
if (e.getSource() == enterGrades)
gradeCollector();
// user clicks the exit on the file menu
if (arg == "Exit")
System.exit(0);
}
public void gradeCollector()
{
int arrayPop = 0;
while (SENTINEL != -1)
{
String grade = JOptionPane.showInputDialog("Please enter a grade:");
checkGrade(grade);
SENTINEL = Integer.parseInt(grade);
grades[arrayPop] = grade;
arrayPop++;
sort(grades);
}
}
public void sort(String tempArray[])
{
//loop to control number of passes
for (int pass = 1; pass < tempArray.length; pass++)
{
for (int element = 0; element < tempArray.length - 1; element++)
if(tempArray[element].compareTo(tempArray[element + 1]) > 0)
{
swap(grades, element, element + 1);
}
}
addTextToTextPane();
}
public JTextPane addTextToTextPane()
{
Document doc = gradesPane.getDocument();
try
{
//clear previous text
doc.remove(0, doc.getLength());
//insert detail
for (int j = 0; j<grades.length; j++)
{
doc.insertString(doc.getLength(), grades[j] + "\t",gradesPane.getStyle("Bold"));
}
}
catch(BadLocationException ble)
{
System.err.println("Couldn't insert text.");
}
return gradesPane;
}
public void swap(String swapArray[], int first, int second)
{
String hold; //temporary holding area for swap
hold = swapArray[first];
swapArray[first] = swapArray[second];
swapArray[second] = hold;
}
public void checkGrade(String value) //implemented later
{
int intValue = 0;
intValue = Integer.parseInt(value);
while ((intValue > 100) || (intValue < -1))
{
JOptionPane.showMessageDialog(null,"that is not a valid entry.");
String grade = JOptionPane.showInputDialog("Please enter a grade:");
intValue = Integer.parseInt(grade);
}
}
public double averager(String genericArray[])
{
int total = 0;
int gradeCount = 0;
double finalAverage;
for (int z = 0; z < genericArray.length; z++)
{
total += Integer.parseInt(genericArray[z]);
gradeCount++;
if (Integer.parseInt(genericArray[z]) <= 0)
gradeCount --;
}
finalAverage = total / gradeCount;
return finalAverage;
}
public String gradeConverter(double decGrade)
{
String result = " ";
if (decGrade > 89)
result = ("Your final grade is " + formatter.format(decGrade) + " an A.");
else
if (decGrade > 79)
result = ("Your final grade is " + formatter.format(decGrade) + " a B.");
else
if (decGrade > 69)
result = ("Your final grade is " + formatter.format(decGrade) + " a C.");
else
if (decGrade > 59)
result = ("Your final grade is " + formatter.format(decGrade) + " a D.");
else result = ("Your final grade is " + formatter.format(decGrade) + " an F. Sorry :(/>/>/>/>");
return result;
}
public static void main(String args[])
{
Average a = new Average();
a.setJMenuBar(a.createMenuBar());
a.setContentPane(a.createContentPane());
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setSize(600,375);
a.setVisible(true);
}
}