gpt4 book ai didi

java - 泵事件错误cardLayout Java

转载 作者:行者123 更新时间:2023-12-01 13:48:10 26 4
gpt4 key购买 nike

我还没有完全完成代码,但在创建 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);
}

}

我遇到的错误是:

    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

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

最佳答案

好吧,我费力地浏览了你的代码,我看到了这个:

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

然后是这个:

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

您正在将 JPanel 的布局转换为它未使用的布局。

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

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

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

所有这一切的教训:批判性地阅读异常消息,因为它通常会准确告诉您您做错了什么。对于你的情况来说确实如此。

关于java - 泵事件错误cardLayout Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com