0

I haven't completely finished the code, but I am having issues after creating the GUI with making the cardLayout be able to switch from one panel to the next. What I am wanting to happen is you can click the "Add" button and you can add all of the information for one student, and have it display on the displayAll panel (haven't written that code yet). However I am getting many errors, and don't know why.

    import javax.swing.*;

    import java.awt.*;
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.awt.event.*;

    public class Lab12 extends JFrame{
private static final long serialVersionUID = 1L;
Scanner input = new Scanner(System.in);

private JButton add;
private JButton remove;
private JButton sort;
private JButton enterAdd;
private JButton enterRemove;
private JButton enterSort;

public String FirstName;
public String LastName;
public String Major;
public String GPA;
public String UIN;
public String NetID;
public String Age;
public String Gender;

private JLabel FNameLbl;
private JLabel LNameLbl;
private JLabel MajorLbl;
private JLabel GPALbl;
private JLabel UINLbl;
private JLabel NetIDLbl;
private JLabel AgeLbl;
private JLabel GenderLbl;

private JTextField FNameTxt;
private JTextField LNameTxt;
private JTextField MajorTxt;
private JTextField GPATxt;
private JTextField UINTxt;
private JTextField NetIDTxt;
private JTextField AgeTxt;
private JComboBox GenderCmbo;

private JRadioButton Student1;
private JRadioButton Student2;
private JRadioButton Student3;
private JRadioButton Student4;
private JRadioButton Student5;
private JRadioButton Student6;
private JRadioButton Student7;
private JRadioButton Student8;
private JRadioButton Student9;
private JRadioButton Student10;

private JRadioButton FNameRB;
private JRadioButton LNameRB;
private JRadioButton MajorRB;
private JRadioButton GPARB;
private JRadioButton UINRB;
private JRadioButton NetIDRB;
private JRadioButton AgeRB;
private JRadioButton GenderRB;

@SuppressWarnings("rawtypes")
static DefaultListModel listStudents;
private static JList<String>list;

private JPanel combo;
private JPanel selection;
private JPanel addInfo;
private JPanel removeInfo;
private JPanel sortInfo;
private JPanel displayAll;
private JPanel placeHolder;

public static ArrayList <Student> students;

public Lab12(){
    FirstName = " ";
    LastName = " ";
    Major = " ";
    GPA = " ";
    UIN = " ";
    NetID = " ";
    Age = " ";
    Gender = " ";

    String Add = "Add";
    String Remove = "Remove";
    String Sort = "Sort";
    String Display = "Display";
    final ArrayList <Student> students = new ArrayList<Student>(10);

    add = new JButton("Add");
    remove = new JButton("Remove");
    sort = new JButton("Sort");
    enterAdd = new JButton("Enter");
    enterRemove = new JButton("Enter");
    enterSort = new JButton("Enter");

    FNameLbl = new JLabel("First Name: ");
    LNameLbl = new JLabel("Last Name: ");
    MajorLbl = new JLabel("Major: ");
    GPALbl = new JLabel("GPA: ");
    UINLbl = new JLabel("UIN: ");
    NetIDLbl = new JLabel("NetID: ");
    AgeLbl = new JLabel("Age: ");
    GenderLbl = new JLabel("Gender: ");

    FNameTxt = new JTextField();
    LNameTxt = new JTextField();
    MajorTxt = new JTextField();
    GPATxt = new JTextField();
    UINTxt = new JTextField();
    NetIDTxt = new JTextField();
    AgeTxt = new JTextField();
    GenderCmbo = new JComboBox(new String[]{"Male", "Female"});

    Student1 = new JRadioButton();
    Student2 = new JRadioButton();
    Student3 = new JRadioButton();
    Student4 = new JRadioButton();
    Student5 = new JRadioButton();
    Student6 = new JRadioButton();
    Student7 = new JRadioButton();
    Student8 = new JRadioButton();
    Student9 = new JRadioButton();
    Student10 = new JRadioButton();

    FNameRB = new JRadioButton("First Name");
    LNameRB = new JRadioButton("Last Name");
    MajorRB = new JRadioButton("Major");
    GPARB = new JRadioButton("GPA");
    UINRB = new JRadioButton("UIN");
    NetIDRB = new JRadioButton("NetID");
    AgeRB = new JRadioButton("Age");
    GenderRB = new JRadioButton("Gender");

    listStudents = new DefaultListModel();
    list = new JList(listStudents);

    combo = new JPanel(new CardLayout());
    selection = new JPanel();
    addInfo = new JPanel();
    removeInfo = new JPanel();
    sortInfo = new JPanel();
    displayAll = new JPanel();
    placeHolder = new JPanel();

    //create panel for displaying all students- should stay on screen
    displayAll.setLayout(new FlowLayout());
    displayAll.add(list);

    //create panel for adding info for a student
    addInfo.setLayout(new GridLayout(9,2,5,5));
    addInfo.add(FNameLbl);
    addInfo.add(LNameLbl);
    addInfo.add(MajorLbl);
    addInfo.add(GPALbl);
    addInfo.add(UINLbl);
    addInfo.add(NetIDLbl);
    addInfo.add(AgeLbl);
    addInfo.add(GenderLbl);
    addInfo.add(FNameTxt);
    addInfo.add(LNameTxt);
    addInfo.add(MajorTxt);
    addInfo.add(GPATxt);
    addInfo.add(UINTxt);
    addInfo.add(NetIDTxt);
    addInfo.add(AgeTxt);
    addInfo.add(GenderCmbo);
    addInfo.add(enterAdd);

    //create panel for selecting the student to remove
    removeInfo.setLayout(new GridLayout(9,1,5,5));
    removeInfo.add(Student1);
    removeInfo.add(Student2);
    removeInfo.add(Student3);
    removeInfo.add(Student4);
    removeInfo.add(Student5);
    removeInfo.add(Student6);
    removeInfo.add(Student7);
    removeInfo.add(Student8);
    removeInfo.add(Student9);
    removeInfo.add(Student10);
    removeInfo.add(enterRemove);

    //create panel for selecting which property to sort
    sortInfo.setLayout(new GridLayout(9,1,5,5));
    sortInfo.add(FNameRB);
    sortInfo.add(LNameRB);
    sortInfo.add(MajorRB);
    sortInfo.add(GPARB);
    sortInfo.add(UINRB);
    sortInfo.add(NetIDRB);
    sortInfo.add(AgeRB);
    sortInfo.add(GenderRB);
    sortInfo.add(enterSort);

    //create panel for the cardLayout 
    combo.add(displayAll, Display);
    combo.add(addInfo, Add);
    combo.add(removeInfo, Remove);
    combo.add(sortInfo, Sort);

    //create permanent panel for the buttons
    selection.setLayout(new GridLayout(3,1,5,5));
    selection.add(add);
    selection.add(remove);
    selection.add(sort);

    //combine the selection and the shifting combo panel to one panel to add to the whole screen
    placeHolder.setLayout(new FlowLayout());
    placeHolder.add(selection);
    placeHolder.add(combo);

    //add to the main screen
    add(placeHolder);

    //add all event handling below

    //gives action to "add"
     add.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                CardLayout combo = (CardLayout) addInfo.getLayout();
                combo.show(addInfo, "add");
            }
        }
        );

    //this obtains all info for each student
     enterAdd.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                FirstName = FNameTxt.getText();
                LastName = LNameTxt.getText();
                Major = MajorTxt.getText();
                GPA = GPATxt.getText();
                UIN = UINTxt.getText();
                NetID = NetIDTxt.getText();
                Age = AgeTxt.getText();
                Gender = (String) GenderCmbo.getSelectedItem();

                students.add(new Student (FirstName, LastName, Major, GPA, UIN, NetID, Age, Gender));
                (listStudents).addElement(students.get(students.lastIndexOf(students)));
            }
        }
        );


}

public static void display(ArrayList<Student> students){
    for (int n = 0; n < 10; n++) {
        Student Student = students.get(n);
        System.out.println(n + ": " + ((Student)students.get(n)).getFName() + ", " + ((Student)students.get(n)).getLName() + ", " + ((Student)students.get(n)).getMajor() + ", " + ((Student)students.get(n)).getGPA() + ", " + ((Student)students.get(n)).getUIN() + ", " + ((Student)students.get(n)).getNetID() + ", " + ((Student)students.get(n)).getAge() + ", " + ((Student)students.get(n)).getGender());
    }
    System.out.println("");
}
@SuppressWarnings("unchecked")
public static void populateJList(ArrayList<Student> students){
    for(int n = 0; n < 10; n++){
    (listStudents).addElement(students.get(n)); 
    }
}

public static void main(String[] args) {
    Lab12 frame = new Lab12();
    frame.setTitle("Student Database");
    frame.setSize(700,700);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

    }

The errors I am getting are:

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.GridLayout cannot be cast to java.awt.CardLayout
at Lab12$1.actionPerformed(Lab12.java:228)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

I was trying to use these as guides: http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html Changing Panels using the Card layout

Any help would be appreciated. The errors don't have any lines, so I have no idea where to start. Thank you!

Community
  • 1
  • 1
  • *"The errors don't have any lines"* Sure they do `..at Lab12$1.actionPerformed(Lab12.java:228)` For better help sooner, post an [SSCCE](http://sscce.org/). (Compile often, and ask us about the 20 lines of code with the one compilation error, rather that the 200+ LOC with multiple errors). – Andrew Thompson Nov 25 '13 at 01:14

1 Answers1

1

OK, I slogged through your code, and I see this:

addInfo.setLayout(new GridLayout(9, 2, 5, 5));

And then this:

CardLayout combo = (CardLayout) addInfo.getLayout();

You're casting the JPanel's layout to one that it's not using.

So this error is self explanatory:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.GridLayout cannot be cast to java.awt.CardLayout

Solution: don't do this! Don't cast an object (here the GridLayout) to something it's not (here CardLayout). If you want a component to use a CardLayout, first you must add a CardLayout to a container.

A lesson from all of this: read the exception message critically as it will often tell you exactly what you're doing wrong. It certainly does in your case.

Hovercraft Full Of Eels
  • 283,665
  • 25
  • 256
  • 373