(请在modifyContact()方法那直接添加语句)
import java.awt.Color;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
@SuppressWarnings("serial")
public class linkman extends JFrame implements ActionListener, //定义linkman类继承JFrame类,并实现ActionListener这个接口
PhoneBookConstants {
private PhoneBook phoneBook;
JTextArea showArea;
public linkman () {
super("我的通讯录");
phoneBook = new PhoneBookImpl(); //
showArea = new JTextArea(20, 30); // 创建一个文本域,显示联系人的信息
showArea.setBackground(Color.lightGray);//文本域背景颜色,浅灰色
showArea.setEditable(false); //文本组件不可编辑状态
BoxLayout layout = new BoxLayout(getContentPane(), BoxLayout.Y_AXIS);//布局为居中排列
JPanel buttonPanel = new JPanel(); //创建一个面板,buttonPanel
buttonPanel.setBackground(Color.green);
JButton addButton = new JButton("添加"); //创建五个按钮,添加查找,刷新,修改,删除
JButton searchButton = new JButton("查找");
JButton updateButton = new JButton("刷新");
JButton modify = new JButton("修改");
JButton removeButton = new JButton("删除");
addButton.addActionListener(this); //添加事件监听器
searchButton.addActionListener(this);
updateButton.addActionListener(this);
modify.addActionListener(this);
removeButton.addActionListener(this);
buttonPanel.add(addButton); //将五个按钮添加到面板buttonPanel中
buttonPanel.add(searchButton);
buttonPanel.add(updateButton);
buttonPanel.add(modify);
buttonPanel.add(removeButton);
display();
add(showArea);
add(buttonPanel);
setLayout(layout);
}
@Override
public void actionPerformed(ActionEvent e) { //为按钮添加事件监听器
if (e.getActionCommand().equals("添加")) {
addContact(); //调用添加联系人的方法
}
else if (e.getActionCommand().equals("查找")) {
searchContact(); //调用搜索联系人的方法
}
else if (e.getActionCommand().equals("刷新")) {
updatePhoneBook(); //调用刷新的方法
}
else if (e.getActionCommand().equals("修改")) {
modifyContact();
}
else if (e.getActionCommand().equals("删除")) {
removeContact();//调用删除的方法
}
}
private void addContact() { //添加联系人的方法
String name = JOptionPane.showInputDialog("请输入联系人的姓名:");
String phone = JOptionPane.showInputDialog("请输入联系人的手机号:");
if (name != null && !name.trim().equals("")) { //如果名字不同则添加成功
if (phoneBook.add(name, phone)) {
JOptionPane.showMessageDialog(null, "添加成功!");
}
else {
JOptionPane.showMessageDialog(null, "抱歉,已经有同姓名的联系人存在!");
}
display();
}
}
private void searchContact() { //查询联系人的方法
int option = -1;
while (option == -1) {
option = JOptionPane.showOptionDialog(null, "请选择一种方式", "",
JOptionPane.DEFAULT_OPTION, //默认通过姓名查找
JOptionPane.INFORMATION_MESSAGE,
null, SEARCH_OPTIONS, SEARCH_OPTIONS[0]); //查找方式以集合的形式存在
}
if (option == 0) {
String name = JOptionPane.showInputDialog("通过姓名");
Contact c = phoneBook.getByName(name);
if (c != null) { //若联系人的姓名不为空,则输出姓名及手机号
JOptionPane.showMessageDialog(null, phoneBook.getByName(name));
}
else {
JOptionPane.showMessageDialog(null, "该联系人不存在");
}
}
else {
String phone = JOptionPane.showInputDialog("通过手机号");
Contact c = phoneBook.getByPhone(phone);
if (c != null && !c.getPhone().equals(ContactImpl.EMPTY_PHONE)) {
JOptionPane.showMessageDialog(null, c);
}
else {
JOptionPane.showMessageDialog(null, "该联系人不存在");
}
}
}
private void updatePhoneBook() { //对联系人刷新的方法
phoneBook.update();
display();
}
private void modifyContact(){ //修改联系人的方法
String name = JOptionPane.showInputDialog("请输入要修改的联系人姓名");
if (name != null && !name.trim().equals(""))
{
int option = JOptionPane.showConfirmDialog(null, "确定要修改联系人:"
+ name +" "+ "吗?", "确定", JOptionPane.YES_NO_OPTION);
if (option == 0) {
if (!phoneBook.remove(name)) {
JOptionPane.showMessageDialog(null, "该联系人不存在!");
}
else {
String n = JOptionPane.showInputDialog("请输入新的联系人姓名");
}
}
}
display();
}
private void removeContact() { //删除联系人的方法
String name = JOptionPane.showInputDialog("请输入要删除的联系人姓名");
if (name != null && !name.trim().equals(""))
{
int option = JOptionPane.showConfirmDialog(null, "确定要删除联系人:"
+ name +" "+ "吗?", "确定", JOptionPane.YES_NO_OPTION);
if (option == 0) {
if (!phoneBook.remove(name)) {
JOptionPane.showMessageDialog(null, "该联系人不存在!");
}
else {
JOptionPane.showMessageDialog(null, "删除成功");
}
}
}
display();
}
private void display() { //显示的方法
showArea.selectAll();
showArea.replaceSelection(""); //用给定的内容替换当前选定的内容
for (Contact c : phoneBook.getPhoneBook()) {
showArea.append(c.toString() + "\n");
}
}
private static void createAndShowGUI() { //创建主窗口
JFrame mainFrame = new linkman();
mainFrame.setLocation(400,200);
mainFrame.setSize(20,20);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置点击关闭按钮默认关闭窗口
mainFrame.pack();
mainFrame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
interface PhoneBookConstants { //选择数组赋值
static final String SEARCH_OPTIONS[] = {"通过姓名", "通过手机号"};
}
interface Contact { //定义Contact接口
public String getName(); //定义抽象方法String getName()
public void setName(String name); //定义抽象方法setName(String name)
public String getPhone(); //定义抽象方法String getphone()
public void setPhone(String phone);//定义抽象方法setPhone(String phone
public String toString();//定义抽象方法String toString()
}
interface PhoneBook { //接口
public ArrayList<Contact> getPhoneBook();
public boolean add(String name); //向集合中添加姓名
public boolean add(String name, String phone);//像集合中添加姓名,手机号
public Contact getByName(String name);
public Contact getByPhone(String phone);
public void update();
public boolean remove(String name); //是否删除集合中的元素
boolean isExist(String name);//判断是否存在该姓名的联系人
}
class ContactImpl implements Contact {
static final String EMPTY_PHONE = "空";
private String name;
private String phone;
public ContactImpl (String name) {
this.name = name;
this.phone = null;
}
public ContactImpl (String name, String phone) {
this.name = name;
this.phone = phone;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getPhone() { //得到手机号的方法,允许为空
if(phone == null){
return EMPTY_PHONE;
}else{
return phone;
}
}
@Override
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return getName() + ": " + getPhone();
}
}
class PhoneBookImpl implements PhoneBook {
ArrayList<Contact> phoneBook;
public PhoneBookImpl () {
phoneBook = new ArrayList<Contact>(); //将phoneBook中的内容放在数组中
}
@Override
public ArrayList<Contact> getPhoneBook() {
return phoneBook;
}
@Override
public boolean add(String name) {//判断联系人是否已经存在,如果不存在就添加到电话簿中
if (isExist(name)) {
return false;
}
else {
phoneBook.add(new ContactImpl(name));
return true;
}
}
@Override
public boolean add(String name, String phone) { //判断联系人是否存在
if (isExist(name)) {
return false;
}
else {
if (phone == null || phone.equals("") || phone.trim().equals("")) {
add(name);
}
else {
phoneBook.add(new ContactImpl(name, phone));
}
return true;
}
}
@Override
public Contact getByName(String name) { //通过姓名查找联系人的方法
for (Contact c : phoneBook) {
if (c.getName().equals(name)) {
return c;
}
}
return null;
}
@Override
public Contact getByPhone(String phone) { //通过手机号查找联系人的方法
for (Contact c : phoneBook) {
if (c.getPhone().equals(phone)) {
return c;
}
}
return null;
}
@Override
public boolean remove(String name) { //删除的方法
for (Contact c : phoneBook) {
if (c.getName().equals(name)) {
phoneBook.remove(c);
return true;
}
}
return false;
}
@Override
public void update() { //刷新的方法
for (int i = 0; i < phoneBook.size() - 1; i++) {
for (int j = i + 1; j < phoneBook.size(); j++) {
if (phoneBook.get(i).getName().toLowerCase().compareTo(
phoneBook.get(j).getName().toLowerCase()) > 0) {
Contact c = phoneBook.get(i);
phoneBook.set(i, phoneBook.get(j));
phoneBook.set(j, c);
}
}
}
}
@Override
public boolean isExist(String name) { //如果联系人存在,则输出该联系人
for (Contact n : phoneBook) {
if (n.getName().equals(name)) {
return true;
}
}
return false;
}
}