// ErrorAlertDemoVector.java // gives user data input error information and allows correction import java.awt.*; import java.awt.event.*; import javax.swing.*; //contains JOptionPane class import javax.swing.border.*; import java.util.*;
// Main method public static void main(String[] args) {new ErrorAlertDemoVector();}
public ErrorAlertDemoVector() { classesSelected = new Vector<String>(); classesOffered = new Vector<String>(); for(int i = 0; i < classStrings.length; i++){ classesOffered.add(classStrings[i]); }
jlbName = new JLabel("Name:"); jtfName = new JTextField(15); jlbAge = new JLabel("Age:"); jtfAge = new JTextField(15); jlbGPA = new JLabel("GPA:"); jtfGPA = new JTextField(15); jlbClass1 = new JLabel("Class 1:"); jcboClass1 = new JComboBox(classesOffered); jlbClass2 = new JLabel("Class 2:"); jcboClass2 = new JComboBox(classesOffered); jlbClass3 = new JLabel("Class 3:"); jcboClass3 = new JComboBox(classesOffered); jlbClass4 = new JLabel("Class 4:"); jcboClass4 = new JComboBox(classesOffered);
// Panel labelPanel to hold labels JPanel labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(7,1)); labelPanel.add(jlbName); labelPanel.add(jlbAge); labelPanel.add(jlbGPA); labelPanel.add(jlbClass1); labelPanel.add(jlbClass2); labelPanel.add(jlbClass3); labelPanel.add(jlbClass4);
JPanel dataPanel = new JPanel(); dataPanel.setLayout(new BorderLayout()); dataPanel.add(labelPanel,BorderLayout.WEST); dataPanel.add(fieldPanel,BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout()); buttonPanel.add(jbtRecordButton = new JButton("Record")); buttonPanel.add(jbtClearButton = new JButton("Clear")); buttonPanel.add(jbtRefreshButton = new JButton("Refresh"));
// Set border title dataPanel.setBorder(new TitledBorder("Student Data"));
//********************************************************************** //name format error //note: could also be done by checking for two space-delimited tokens
String[] tokens = name.split("[ ]+"); if(tokens.length < 2){ JOptionPane.showMessageDialog(null, "Name must be at least a first and \n" + "last name separated by a space", "Name format warning", JOptionPane.WARNING_MESSAGE); return; }
for(int i = 0; i < tokens.length; i++){ if(!isValidName(tokens[i])){ JOptionPane.showMessageDialog(null, "Names can contain only characters and hyphens", "Name format warning", JOptionPane.WARNING_MESSAGE); return; } }
//********************************************************************** //number format error - age
try{ age = Integer.parseInt(ageString);
}catch(NumberFormatException nfe){ JOptionPane.showMessageDialog(null, "Age must be an integer", "Number format warning", JOptionPane.WARNING_MESSAGE); jtfAge.selectAll(); jtfAge.requestFocusInWindow(); return; }
//********************************************************************** //number format error - gpa
try{ gpa = Double.parseDouble(gpaString);
if(gpa < 0 || gpa > 5.0){ JOptionPane.showMessageDialog(null, "GPA must be between 0.0 and 5.0", "Number format warning", JOptionPane.WARNING_MESSAGE); jtfGPA.selectAll(); jtfGPA.requestFocusInWindow(); return; } }catch(NumberFormatException nfe){ JOptionPane.showMessageDialog(null, "GPA must be an integer or a double", "Number format warning", JOptionPane.WARNING_MESSAGE); jtfGPA.selectAll(); jtfGPA.requestFocusInWindow(); return; } //********************************************************************** //failure to select four classes (iterator and for loop) /* for(index = 0; index < classesSelected.size(); index++){ if(((String)classesSelected.get(index)).equals("Select class")){ */ Iterator<String> classIter = classesSelected.iterator(); while(classIter.hasNext()){ String classString = (String)classIter.next(); if(classString.equals("Select class")){ JOptionPane.showMessageDialog(null, "You must select four classes!", "Class selection warning", JOptionPane.WARNING_MESSAGE); return; } }
//********************************************************************** //selecting the same class twice Vector<String> tempClassesSelected = new Vector<String>(classesSelected); for(index = 0; index < tempClassesSelected.size() - 1; index++){ String tempClass = (String)tempClassesSelected.remove(index); if(tempClassesSelected.contains(tempClass)){ JOptionPane.showMessageDialog(null, "You cannot select the same class twice!", "Class selection warning", JOptionPane.WARNING_MESSAGE); return; } } //********************************************************************** //no exceptions System.out.println(name); System.out.println(age); System.out.println(gpa); printClasses(); }else if(e.getSource() == jbtClearButton) { jtfName.setText(""); jtfAge.setText(""); jtfGPA.setText(""); jcboClass1.setSelectedIndex(0); jcboClass2.setSelectedIndex(0); jcboClass3.setSelectedIndex(0); jcboClass4.setSelectedIndex(0); classesSelected.clear(); }else if(e.getSource() == jbtRefreshButton) { jtfName.setText("Rocket Squirrel"); jtfAge.setText("10"); jtfGPA.setText("3.5"); jcboClass1.setSelectedIndex(0); jcboClass2.setSelectedIndex(0); jcboClass3.setSelectedIndex(0); jcboClass4.setSelectedIndex(0); classesSelected.clear(); } } public void printClasses(){ Iterator iter = classesSelected.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } } //***************************************************************** //Utility methods //***************************************************************** private boolean isValidName(String name){ return name.matches("[a-zA-Z-]+"); } }