我创建了一个GUI,它接受以下字段(名称、街道、城市、州、邮政编码、帐号)。此外,您可以从面板中选择3种客户类型,最后从下拉式课程组合框中选择一门课程。
当用户输入上述信息并单击"提交"时,如果客户不存在,程序将创建客户并将其放在客户列表中,在课程列表中找到所选课程,并通过弹出的确认对话框询问用户是否希望注册该课程。如果用户选择"是",则课程将添加到该客户的课程列表中,字段将被清除,光标将放置在名称字段中,并且可以进行另一项输入。如果客户已经退出,则不会创建新客户,而是将课程添加到该客户的课程列表中。当用户单击"完成"时,程序会写入每个客户及其课程列表的提示,显示发票对话框,然后退出。使用匿名actionListener。我需要有一个clearFields
、addCourse
的方法,它接受客户名称和课程标题,addCustomer
使用字段中的数据创建客户并将其添加到客户列表,readCourses
读取courses.txt
,创建课程并将它们添加到课程列表,并填充用于下拉框选择的字符串数组,以及generateInvoice
。这是我所能做到的。
submitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
if (confirm())
{
customerList.add(new Customer(nameField.getText(),new Address(streetField.getText(), cityField.getText(), stateField.getText(), Integer.parseInt(zipField.getText())), Integer.parseInt(accountNumberField.getText())));
}
clearFields();
}
});
finishButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
for(Customer c: customerList)
System.out.println(c.toString());
System.exit(0);
}
});
add(nameLabel);
add(nameField);
add(streetLabel);
add(streetField);
add(cityLabel);
add(cityField);
add(stateLabel);
add(stateField);
add(zipLabel);
add(zipField);
add(accountNumberLabel);
add(accountNumberField);
add(customerLabel);
add(myPanel);
add(courseLabel);
add(courseBox);
add(submitLabel);
add(submitButton);
add(finishLabel);
add(finishButton);
}
public static void main(String args[])
{
CourseGUI g = new CourseGUI();
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g.setLocationRelativeTo(null);
g.setSize(650,350);
g.setVisible(true);
}
public void clearFields()
{
nameField.setText("");
streetField.setText("");
cityField.setText("");
stateField.setText("");
zipField.setText("");
accountNumberField.setText("");
myGroup.clearSelection();
courseBox.setSelectedIndex(0);
nameField.requestFocus();
}
public String getCourse()
{
return courses[courseBox.getSelectedIndex()];
}
public String getClassification()
{
if (studentButton.isSelected())
return studentButton.getText();
else if (facultyButton.isSelected())
return facultyButton.getText();
else
return governmentButton.getText();
}
public boolean confirm()
{
JFrame frame = new JFrame();
int result;
String message;
message = String.format("%s %s %s %s %s %d %d", nameField.getText(), streetField.getText(), cityField.getText(), stateField.getText(), zipField.getText(), accountNumberField.getText());
result = JOptionPane.showConfirmDialog(frame, message);
if (result == JOptionPane.YES_OPTION)
return true;
return false;
}
我需要帮助的是submitButton中的编码。addActionListener
。我该如何检查客户是否已经存在,如果不存在,则将其添加到customerList
中。假设已经创建了所需的所有其他类和arrayList
当您认为用户输入的客户已经存在于列表中时,您必须首先从功能上做出决定。简而言之:是什么让一个客户与另一个客户平等。
如果他们有相同的名字,他们是平等的吗?或者如果他们有相同的名字和账号?还是相同的名字和地址?
根据情况,覆盖Customer类中的方法Object.equals()
和Object.hashCode()
。请务必阅读这些方法的javadoc以了解它们的契约。
最后,在操作监听器中,在将Customer添加到列表之前,测试列表是否已经包含Customer(使用contains()
方法)。