pumpEvents错误cardLayout Java

pumpEvents错误cardLayout Java,java,swing,user-interface,error-handling,cardlayout,Java,Swing,User Interface,Error Handling,Cardlayout,我还没有完全完成代码,但是在创建GUI之后,我遇到了一些问题,无法使cardLayout从一个面板切换到下一个面板。我想做的是,你可以点击“添加”按钮,为一个学生添加所有信息,并在displayAll面板上显示(尚未编写该代码)。然而,我得到了很多错误,不知道为什么 import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.Scanner;

我还没有完全完成代码,但是在创建GUI之后,我遇到了一些问题,无法使cardLayout从一个面板切换到下一个面板。我想做的是,你可以点击“添加”按钮,为一个学生添加所有信息,并在displayAll面板上显示(尚未编写该代码)。然而,我得到了很多错误,不知道为什么

    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);
}

    }
我试着用这些作为指导:


任何帮助都将不胜感激。错误没有任何行,所以我不知道从哪里开始。谢谢大家!

好的,我仔细阅读了你的代码,我看到了:

addInfo.setLayout(new GridLayout(9, 2, 5, 5));
然后这个:

CardLayout combo = (CardLayout) addInfo.getLayout();
您正在将JPanel的布局转换为它未使用的布局

所以这个错误是不言自明的:

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:无法将java.AWT.GridLayout转换为java.AWT.CardLayout

解决方案:不要这样做!不要将对象(此处为GridLayout)强制转换为它不是的对象(此处为CardLayout)。如果希望组件使用CardLayout,首先必须将CardLayout添加到容器中


所有这些都给了我们一个教训:批判性地阅读异常消息,因为它通常会准确地告诉您做错了什么。在您的情况下当然是这样。

“错误没有任何行”当然有。
。在Lab12$1.actionPerformed(Lab12.java:228)
要更快地获得更好的帮助,请发布一个。(经常编译,问我们20行代码中有一个编译错误,而不是200多行代码中有多个错误)。我想我是在试图效仿别人的榜样,却没有意识到自己在做什么。我回去做了一个单独的面板,将我想添加到cardLayout中的每个面板放在括号中,并添加了cardLayout:p1Add=new JPanel(new cardLayout());然后我改变了combo.add(P1Add,add);我改变了CardLayout combo=(CardLayout)p1Add.getLayout();我仍然没有让它显示出来,但是所有的错误都消失了。谢谢你的帮助!
CardLayout combo = (CardLayout) addInfo.getLayout();