2013-11-25 53 views
0

我还没有完全完成的代码,但我有使cardLayout能够切换从一个面板到下一个创建GUI后的问题。我所希望出现的情况是,你可以点击“添加”按钮,您可以添加所有的信息,一个学生,并将它显示displayAll面板上(没有写的代码还)。但是,我收到很多错误,不知道为什么。pumpEvents错误cardLayout的Java

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

    } 

我得到的错误是:

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) 

我试图用这些作为指导: http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html Changing Panels using the Card layout

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

+0

* “的错误,没有任何行” *确保它们'..at Lab12 $ 1.actionPerformed(Lab12.java:228)'为了更好地帮助越早,张贴[SSCCE(HTTP:// SSCCE .org等/)。 (经常进行编译,并向我们询问有关编译错误的20行代码,而不是200 + LOC有多个错误)。 –

回答

1

OK,我通过您的代码艰难地,我看到:

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添加到容器。

所有这些的教训:批判地阅读异常信息,因为它会经常告诉你究竟是你做错了什么。它当然在你的情况下。

+0

谢谢气垫船的回应。我想我正在试图跟随别人的榜样,却没有意识到我在做什么。我回去,并提出了单独的面板中把每个小组的我想添加到cardLayout,并在括号中添加的cardLayout: – user2758501

+0

p1Add =新JPanel(新CardLayout()); – user2758501

+0

p1Add.add(addInfo); – user2758501