JOptionPane, JComboBox, Clear, Cancel problems
807598Mar 19 2006 — edited Mar 20 2006Hi. I am new to the forum so please bear with me if I don�t explain this correctly. I am writing code to enter a certain number of grades and to do several things with the grades. An external class is being used. I am using a JComboBox to select the number of grades to input. When the input menu item is selected, A JOptionPane input dialog box pops up asking for input of the grades. I am having 3 problems with this program.
1) I have entered the items in the JComboBox using numberCombo.addItem(��) for each item. Doing it this way, the loop for the input dialog box works fine. My instructor wants the items added as a string. When I do it using the string(which is commented out at this moment), the loop for the input dialog box stops after inputting the first grade no matter which number is selected. My instructor couldn�t figure out why it was doing this either.
2) After inputting grades and clicking the clear menu item, the grades entered stay in memory. How do I flush the memory when clear is clicked?
3) As I stated before, A JOptionPane input dialog box comes up asking for the grades when the input menu item is selected. An error dialog box comes up if the number entered isn�t an integer between 0-100 which is what I want, but if I click the cancel button on the input dialog box, it gives me the same error instead of canceling.
Any help would be greatly appreciated.
Here is my external class:
import javax.swing.JOptionPane;
public class Grades
{
int[] grades;
int size;
Grades (int numberCombo)
{
grades = new int[numberCombo];
size = grades.length;
}
//input
public void inputGrades()
{
int i;
boolean error;
for(i=0; i<size; i++)
{
do
{
try
{
error = false;
if (grades == null)
{
System.exit(0);
}
grades=Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter grade "+(i+1)));
if(grades[i] < 0 || grades[i] > 100) throw new NumberFormatException();
}
catch(NumberFormatException ex)
{
error = true;
JOptionPane.showMessageDialog(null,"You must enter a grade between 0 - 100", "ERROR",JOptionPane.ERROR_MESSAGE);
}
} while(error == true);
}
}
//average
public double averageGrade()
{
int sum = 0;
int i;
double average = 0;
for (i=0; i<size; i++)
{
sum += grades[i];
average = (double) sum /size;
}
return average;
}
//maximum
public int maximumGrade()
{
int i;
int highest = 0;
for (i=0; i<size; i++)
{
if (grades[i]>highest)
highest = grades[i];
}
return highest;
}
//mimimum
public int minimumGrade()
{
int i;
int lowest = 101;
for (i=0; i<size; i++)
{
if (grades[i]<lowest)
lowest = grades[i];
}
return lowest;
}
//sort Ascending
public void sortAscending()
{
for (int pass = 1; pass < size; pass++)
{
for (int element = 0; element < size-1; element++)
{
if (grades[element] > grades[element + 1])
{
int temp;
temp = grades[element];
grades[element] = grades[element + 1];
grades[element + 1] = temp;
}
}
}
}
//make a string for the array
String makeString()
{
String s = " ";
for (int i = 0; i < size; i++)
s = s + grades[i] + " ";
return s;
}
//sort descending
public void sortDescending()
{
for (int pass = 1; pass < size; pass++)
{
for (int element = 0; element < size-1; element++)
{
if (grades[element] < grades[element + 1])
{
int temp;
temp = grades[element];
grades[element] = grades[element + 1];
grades[element + 1] = temp;
}
}
}
}
}
Here is my driver class:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.JOptionPane;
import java.text.DecimalFormat;
public class Grades4 extends JFrame implements ActionListener
{
JLabel numberPrompt = new JLabel("Please enter the number of grades to input:");
JComboBox numberCombo = new JComboBox();
JTextPane textPane = new JTextPane();
Grades grade;
public Grades4()
{
super("Grades Calculator");
}
public JMenuBar createMenuBar()
{
//create menu and menu items
JMenuBar mnuBar = new JMenuBar();
setJMenuBar(mnuBar);
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);
JMenu mnuGrades = new JMenu("Grades", true);
mnuGrades.setMnemonic(KeyEvent.VK_G);
mnuGrades.setDisplayedMnemonicIndex(0);
mnuBar.add(mnuGrades);
JMenuItem mnuGradesInput = new JMenuItem("Input");
mnuGradesInput.setMnemonic(KeyEvent.VK_I);
mnuGradesInput.setDisplayedMnemonicIndex(0);
mnuGrades.add(mnuGradesInput);
mnuGradesInput.setActionCommand("Input");
mnuGradesInput.addActionListener(this);
JMenuItem mnuGradesClear = new JMenuItem("Clear");
mnuGradesClear.setMnemonic(KeyEvent.VK_C);
mnuGradesClear.setDisplayedMnemonicIndex(0);
mnuGrades.add(mnuGradesClear);
mnuGrades.insertSeparator(2);
mnuGradesClear.setActionCommand("Clear");
mnuGradesClear.addActionListener(this);
JMenu mnuGradesStatistics = new JMenu("Statistics");
mnuGradesStatistics.setMnemonic(KeyEvent.VK_T);
mnuGradesStatistics.setDisplayedMnemonicIndex(1);
mnuGrades.add(mnuGradesStatistics);
JMenuItem mnuGradesStatisticsAverage = new JMenuItem("Average");
mnuGradesStatisticsAverage.setMnemonic(KeyEvent.VK_V);
mnuGradesStatisticsAverage.setDisplayedMnemonicIndex(1);
mnuGradesStatistics.add(mnuGradesStatisticsAverage);
mnuGradesStatisticsAverage.setActionCommand("Average");
mnuGradesStatisticsAverage.addActionListener(this);
JMenuItem mnuGradesStatisticsMaximum = new JMenuItem("Maximum");
mnuGradesStatisticsMaximum.setMnemonic(KeyEvent.VK_M);
mnuGradesStatisticsMaximum.setDisplayedMnemonicIndex(0);
mnuGradesStatistics.add(mnuGradesStatisticsMaximum);
mnuGradesStatisticsMaximum.setActionCommand("Maximum");
mnuGradesStatisticsMaximum.addActionListener(this);
JMenuItem mnuGradesStatisticsMinimum = new JMenuItem("Minimum");
mnuGradesStatisticsMinimum.setMnemonic(KeyEvent.VK_N);
mnuGradesStatisticsMinimum.setDisplayedMnemonicIndex(0);
mnuGradesStatistics.add(mnuGradesStatisticsMinimum);
mnuGradesStatisticsMinimum.setActionCommand("Minimum");
mnuGradesStatisticsMinimum.addActionListener(this);
JMenu mnuGradesSort = new JMenu("Sort");
mnuGradesSort.setMnemonic(KeyEvent.VK_S);
mnuGradesSort.setDisplayedMnemonicIndex(0);
mnuGrades.add(mnuGradesSort);
JMenuItem mnuGradesSortAscending = new JMenuItem("Ascending");
mnuGradesSortAscending.setMnemonic(KeyEvent.VK_A);
mnuGradesSortAscending.setDisplayedMnemonicIndex(0);
mnuGradesSort.add(mnuGradesSortAscending);
mnuGradesSortAscending.setActionCommand("Ascending");
mnuGradesSortAscending.addActionListener(this);
JMenuItem mnuGradesSortDescending = new JMenuItem("Descending");
mnuGradesSortDescending.setMnemonic(KeyEvent.VK_A);
mnuGradesSortDescending.setDisplayedMnemonicIndex(0);
mnuGradesSort.add(mnuGradesSortDescending);
mnuGradesSortDescending.setActionCommand("Descending");
mnuGradesSortDescending.addActionListener(this);
return mnuBar;
}
public Container createContentPane()
{
//popluate the JComboBox
//String[] data = {"2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
//JComboBox numberCombo= new JComboBox(data);
numberCombo.addItem("2");
numberCombo.addItem("3");
numberCombo.addItem("4");
numberCombo.addItem("5");
numberCombo.addItem("6");
numberCombo.addItem("7");
numberCombo.addItem("8");
numberCombo.addItem("9");
numberCombo.addItem("10");
numberCombo.addItem("11");
numberCombo.addItem("12");
numberCombo.addItem("13");
numberCombo.addItem("14");
numberCombo.addItem("15");
numberCombo.addItem("16");
numberCombo.addItem("17");
numberCombo.addItem("18");
numberCombo.addItem("19");
numberCombo.addItem("20");
numberCombo.setToolTipText("Click to select the number of grades.");
//construct and populate the north panel
JPanel northPanel = new JPanel();
northPanel.setLayout( new FlowLayout());
northPanel.add(numberPrompt);
northPanel.add(numberCombo);
//construct and populate the center panel
JPanel centerPanel = new JPanel();
JScrollPane scrollPane = new JScrollPane(textPane);
scrollPane.setPreferredSize(new Dimension(350,60));
centerPanel.add(scrollPane);
textPane.setFont(new Font("TimesRoman",Font.PLAIN, 17));
//set the container
Container c = getContentPane();
c.setLayout(new BorderLayout(30,20));
c.add(northPanel, BorderLayout.NORTH);
c.add(centerPanel, BorderLayout.CENTER);
return c;
}
public void actionPerformed(ActionEvent e)
{
//test for menu item clicks
String arg = e.getActionCommand();
if (arg == "Exit")
System.exit(0);
if (arg == "Input")
{
grade = new Grades(numberCombo.getSelectedIndex() + 2);
System.out.println(numberCombo.getSelectedIndex());
grade.inputGrades();
}
if (arg == "Clear")
{
clearFields();
}
if (arg == "Average")
{
DecimalFormat twoDigits = new DecimalFormat("###.0");
double average = grade.averageGrade();
textPane.setText(" The average grade is " + twoDigits.format(average));
}
if (arg == "Minimum")
{
int minimum = grade.minimumGrade();
textPane.setText(" The minimum grade is " + minimum);
}
if (arg == "Maximum")
{
int maximum = grade.maximumGrade();
textPane.setText(" The maximum grade is " + maximum);
}
if (arg == "Ascending")
{
grade.sortAscending();
String s = grade.makeString();
textPane.setText(s);
}
if (arg == "Descending")
{
grade.sortDescending();
String s = grade.makeString();
textPane.setText(s);
}
}
void clearFields()
{
textPane.setText("");
numberCombo.requestFocus();
}
//set Jframe
public static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
Grades4 f = new Grades4();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setJMenuBar(f.createMenuBar());
f.setContentPane(f.createContentPane());
f.textPane.setEditable(false);
f.setSize(430,250);
f.setVisible(true);
Image icon = Toolkit.getDefaultToolkit().getImage("A1.jpg");
f.setIconImage(icon);
}
}