[Word]C语言制作通讯录
C语言制作通讯录
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目:使用NetBeans制作一个GUI(图形用户界面)通讯录
1、用NetBeans新建一个项目,名称为Notebook。 2、新建Jframe窗体,名称为NotebookView。 3、设计窗体。
采用鼠标拖动的方式,主要用到(内部框架) 面板:变量名称“MainPanel”,右键,
属性,boder,带标题的边框,标题“通讯录”
标签:名称“姓名”、“手机”、“E-mail”、“家庭住址”
变量名称“jLabelName”、“jLabelTel”、“jLabelEmail”、
“jLabelAddress”
文本字段:变量名称“jTextName”、“jTextTel”、“jTextEmail”、
“jTextAddress”
列表:变量名称“jListText”,右击,属性,model,删除项目,使列表初始为空
按钮:名称“增加”、“修改”、“删除”、“保存”、“退出”
变量名称“jButtonAdd”、“jButtonEdit”、“jButtonDel”、
“jButtonSave”、“jButtonExit”
界面设计完成
4、新建JavaBeans组件,名称为Person。 删除类中代码,右击/插入代码/添加属性: name /tel/ email /address
5、为各个按钮添加”状态“代码,双击各个按钮即可
“退出”按钮:System.exit(-1);
“增加”按钮:点击“增加”按钮后应该使文本字段为可编辑状态(且为空),
将光标置于姓名文本字段,并且“增加”、“修改”、“删除”为不可用状态,
“保存”按钮为可用状态
//设置文本字段为可编辑状态
变量名称.setEditable(true);
//设置文本字段为空
变量名称.setText("");
//设置提示光标位置
变量名称.requestFocusInWindow();
//修改按钮为可用
变量名称.setEnabled(true);
//修改按钮为不可用
变量名称.setEnabled(false);
“修改”按钮:点击“修改”按钮后应该使文本字段(除姓名外,姓名不可改,只能删除此人)为可编辑状态, 并且“增加”、“修改”、“删除”为不可用状态,“保存”按钮为可用状态
“删除”按钮:点击“删除”按钮后应该使文本字段为不可编辑状态,
并且“增加”、“修改”、“删除”、“保存”按钮为可用状态
“保存”按钮:点击“保存”按钮后应该使文本字段为不可编辑状态,
并且“增加”、“修改”、“删除”为可用状态,“保存”按钮为不可用状态
6、为列表添加部分代码
为了在列表中显示增加的内容,需在NotebookView中使用集合
import java.util.*;//也可使用Alt+Enter选择导入包
Hashtable ht = new Hashtable();
Vector v = new Vector();
在"设计"中,右击列表,事件,ListSelection,ValueChanged
窗体中的文本字段为不可编辑状态,文本字段应显示相应的内容,
列表中显示当前的记录,并且“增加”、“修改”、“删除”为可用状态,
“保存”按钮为不可用状态
String s = (String) jListText.getSelectedValue();
if(s!=null)
{
if (v.size() == 0) {
jListText.setSelectedIndex(0);
}
//设置文本字段显示的内容
Person p = (Person) ht.get(s);
变量名称.setText(p.get方法);
}
7、给“保存”按钮添加代码,将内容写入列表, 需导入包import javax.swing.*;
代码是:
String name = jTextName.getText().trim();
if (name.equals("")) {
JOptionPane.showMessageDialog(MainPanel, "姓名不能为空~");
jTextName.requestFocusInWindow();
return;
}
if(v.contains(name)){
JOptionPane.showMessageDialog(MainPanel, "姓名已经存在~");
jTextName.requestFocusInWindow();
return;
}
//添加数据到集合
v.add(name);
Person p = new Person(name, jTextEmail.getText(),
jTextTel.getText(),jTextAddress.getText());
ht.put(name, p);
//数据显示到列表中
jListText.setListData(v);
8、给“保存”按钮添加代码,将修改后的内容写入列表,
为区分是增加保存还是修改保存, 设变量mode
int mode=1;//增加1,修改2
在“增加”按钮的代码最后加上mode=1; 在“修改”按钮的代码最后加上mode=2; 修改部分“保存”按钮代码,其余不变。
if(mode==1)
{
if (name.equals("")) {
JOptionPane.showMessageDialog(MainPanel, "姓名不能为空~");
jTextName.requestFocusInWindow();
return;
}
if(v.contains(name)){
JOptionPane.showMessageDialog(MainPanel, "姓名已经存在~");
jTextName.requestFocusInWindow();
return;
}
v.add(name);
}
//修改mode
mode=1;
9、为“删除”按钮添加代码,双击按钮即可 int i = JOptionPane.showConfirmDialog(MainPanel, "请确认要删除吗,");
if (i == 0) {
String name = (String) jListText.getSelectedValue();
if (name != null) {
v.remove(name);
ht.remove(name);
jListText.setListData(v);
if (v.size() != 0) {
jListText.setSelectedIndex(0);
} else {
jTextName.setText("");
jTextEmail.setText("");
jTextTel.setText("");
jTextAddress.setText("");
}
}
}
//修改mode
mode=1;
10、序列化和反序列化,即实现输入内容的保存和打开
import java.io.*;
在NotebookView.java中添加方法
public void ObjectRead() {
//反序列化,即从磁盘中读出保存的数据
FileInputStream fi = null;
ObjectInputStream so = null;
try {
fi = new FileInputStream("newFile");
so = new ObjectInputStream(fi);
ht = (Hashtable) so.readObject();
v = (Vector) so.readObject();
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(this,"通讯录文件找不到!\n你可能是第一次使用本程序,或丢失了数据文件!","错误",JOptionPane.PLAIN_MESSAGE);
} catch (ClassNotFoundException e2) {
System.out.println(toString());
} catch (IOException e3) {
System.out.println(toString());
}
}
public void ojbectSerialize() {
//序列化,即将数据写入磁盘文件中
ObjectOutputStream so = null;
FileOutputStream fo = null;
try {
fo = new FileOutputStream("newFile");
so = new ObjectOutputStream(fo);
so.writeObject(ht);
so.writeObject(v);
} catch (FileNotFoundException e1) {
System.out.println(toString());
} catch (IOException e2) {
System.out.println(toString());
} finally {
try {
so.close();
fo.close();
} catch (IOException ex) {
System.out.println(toString());
}
}
}
修改"退出"按钮的代码为:
this.ojbectSerialize();//在退出前保存数据到文件
System.exit(-1);
修改NotebookView.java的构造方法 public NotebookView() {
//对象反序列化
this.ObjectRead();
//初始化组件
initComponents();
//将数据连入List列表中
jListText.setListData(v);
//设置选中第1条记录
jListText.setSelectedIndex(0);
}
11、添加菜单栏和菜单项
拖动“菜单栏”到合适位置,修改名称为“文件”,"帮助",
变量名称为"JMenuFIle","JMenuHelp" 拖动“菜单项”到“文件”下面,修改名称为“退出”,
变量名称为“jMenuExit”,快捷键为“Alt+Q” 右击“退出”菜单项,选择“事件”,action,actionperformed,
添加代码:
System.exit(-1);
拖动“菜单项”到“帮助”下面,修改名称为“关于”,
变量名称为“jMenuAbout”,快捷键为“Alt+A” 12、添加关于窗体
新建JFrame窗体,NotebookAbout.java 设计界面
4个标签,1个按钮
标签1:属性,icon,splane.png(一幅图片) 标签2:我的应用程序1.0
标签3:版权所有(C)2008,本人保留所有权利 标签4:联系我:lulovemengfei@sina.com 按钮:名称“知道了”,变量名称“JButtonOK” 双击“知道了”按钮,添加代码
this.dispose();
13、为“关于”菜单项添加代码
右击“关于”菜单项,选择“事件”,action,actionperformed,
添加代码:
NotebookAbout ab=new NotebookAbout(); ab.setVisible(true);
14、添加登录界面
右击源包/notebook,选择新建,JFrame窗体,Password.java
设计界面
3个标签,1个文本字段,1个密码字段 标签1:名称“用户登录”
标签2:名称“用户名”
标签3:名称“密码”
文本字段:名称为空,变量名称“jTextName” 密码字段:名称为空,变量名称“jPassword” 右击密码字段,选择“事件”,action,actionperformed,
添加代码:
if(jTextName.getText().equals("sll")&&jPassword.getText().e
quals("123"))
{
new NotebookView().setVisible(true);
this.dispose();
}
else
{
JOptionPane.showMessageDialog(this,"密码错误!","警告",JOptionPane.PLAIN_MESSAGE);
jTextName.setText("");
jPassword.setText("");
jTextName.requestFocusInWindow();
}
15、点击“生成”菜单,选择设置主项目配置,定制,
主类:Password.java
16、运行主项目
17、生成可执行文件,即jar文件 生成/生成主项目
在dist文件夹中就看到了,可以将它和数据文件一起拷贝到任何目录下去使用了。