Java 实现通讯录系统全部源码

马倩19891012

贡献于2012-04-17

字数:56178 关键词: Java开发 Java

Java实现《通讯录》系统 2011年9月25日(印) Java实现《通讯录》 软件测试.094 谭 又 中 Java实现《通讯录》系统 2011年9月25日(印) 2011/09/25 (共37页) 登陆界面: Java实现《通讯录》系统 2011年9月25日(印) 源码: package sources; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LoginForm extends JFrame implements ActionListener { //声明组件 private JPanel jpanel1=new JPanel(); //声明面板容器 private JLabel[] arrayJLabel={new JLabel("用户名:"),new JLabel("密 码:"),new JLabel("")}; //声明包含三个标签的标签数组 private JTextField userNameJTextField=new JTextField(); //声明用户名文本域 private JPasswordField passwordJPasswordField=new JPasswordField(); //声明密码输入域 private JButton[] arrayJButton={new JButton("登 录"),new JButton("注 册")}; //声明包含两个按钮数组 Java实现《通讯录》系统 2011年9月25日(印) //构造函数 public LoginForm() { //设置窗体相关属性 //设置标题栏显示图标 Image icon2=Toolkit.getDefaultToolkit().getImage("images\\ico.gif"); this.setIconImage(icon2); //设置窗口标题 this.setTitle("--登 录--"); //设置窗口不可拖动大小 this.setResizable(false); //设置窗口大小 this.setSize(350,300); //获取屏幕尺寸 Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth=screenSize.width; int srceenHeight=screenSize.height; //设置窗口居于屏幕中央 setLocation((screenWidth-getWidth())/2,(srceenHeight-getHeight())/2); Java实现《通讯录》系统 2011年9月25日(印) //设置组件的相关属性 //设置面板容器的布局策略为空 jpanel1.setLayout(null); //设置面板容器背景色 jpanel1.setBackground(Color.WHITE); //利用循环添加标签和按钮 for(int i=0;i<2;i++) { //设置2个标签和2个按钮的位置及大小 arrayJLabel[i].setBounds(65, 164+i*35, 80, 26); arrayJButton[i].setBounds(60+i*135, 235, 90, 26); //设置2个标签和两个按钮的文本颜色 arrayJLabel[i].setForeground(Color.RED); arrayJButton[i].setForeground(Color.RED); //设置2个标签和两个按钮的字体 arrayJLabel[i].setFont(new Font("宋体",Font.PLAIN,14)); arrayJButton[i].setFont(new Font("宋体",Font.PLAIN,15)); Java实现《通讯录》系统 2011年9月25日(印) //将2个标签和2个按钮添加到面板容器 jpanel1.add(arrayJLabel[i]); jpanel1.add(arrayJButton[i]); //为按钮添加动作事件监听器 arrayJButton[i].addActionListener(this); } //设置文本域和密码框的最大输入字符量 userNameJTextField.setColumns(15); passwordJPasswordField.setColumns(16); //设置文本域和密码框的位置及大小 userNameJTextField.setBounds(115, 161, 160, 30); passwordJPasswordField.setBounds(115, 198, 160, 30); //设置密码输入回显字符 passwordJPasswordField.setEchoChar('*'); //设置文本域和密码框的文本颜色 userNameJTextField.setForeground(Color.RED); passwordJPasswordField.setForeground(Color.RED); //设置文本域和密码框的字体 userNameJTextField.setFont(new Font("宋体",Font.BOLD,16)); Java实现《通讯录》系统 2011年9月25日(印) passwordJPasswordField.setFont(new Font("宋体",Font.BOLD,16)); //定义一个图标对象,用于显示登陆界面图像 ImageIcon icon1=new ImageIcon("images\\txl_1.jpg"); //设置图像 arrayJLabel[2].setIcon(icon1); //设置标签位置及尺寸 arrayJLabel[2].setBounds(0,0,350,158); //将文本域和密码框添加到面板容器 jpanel1.add(arrayJLabel[2]); jpanel1.add(userNameJTextField); jpanel1.add(passwordJPasswordField); //为文本域和密码框添加事件监听器 userNameJTextField.addActionListener(this); passwordJPasswordField.addActionListener(this); //将面板容器添加到内容窗格 this.add(jpanel1); //为窗口添加关闭响应事件 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) Java实现《通讯录》系统 2011年9月25日(印) { System.exit(0); } }); //显示窗体 this.setVisible(true); } //定义一个公共方法,清空文本域内容,并定位焦点到文本域 public void userNameClear() { //清空文本域内容 userNameJTextField.setText(""); //文本域获得焦点 userNameJTextField.requestFocus(); } //定义一个公共方法,清空密码框内容,并定位焦点到密码框 public void passwordClear() { //清空密码框内容 passwordJPasswordField.setText(""); //密码框获得焦点 passwordJPasswordField.requestFocus(); } //@Override //声明此方法为重写方法 Java实现《通讯录》系统 2011年9月25日(印) //实现ActionListener接口的方法,以实现对事件的监听处理 public void actionPerformed(ActionEvent e) { //定义变量(用于调用DBOperate类的方法的实参传递) String user=userNameJTextField.getText().toString().trim(); //用户名变量 String pwd=String.valueOf(passwordJPasswordField.getPassword()); //密码变量 String sql=""; //SQL查询语句变量 //如果事件源是文本域输入框,则进行相应操作 if(e.getSource()==userNameJTextField) { //让焦点转移到密码框 passwordJPasswordField.requestFocus(); } //如果事件源是登录按钮或者是在输入密码完毕后点击了回车按钮,则进行相应操作 else if(e.getSource()==arrayJButton[0]||e.getSource()==passwordJPasswordField) { //判断输入是否合法 Java实现《通讯录》系统 2011年9月25日(印) if(user.equals("")) { //提示输入不合法 JOptionPane.showMessageDialog(this, "用户名输入不合法!", "系统提示", JOptionPane.INFORMATION_MESSAGE); //文本域获得焦点 userNameJTextField.requestFocus(); //该句可防止用户名和密码均为空一次性弹出2个对话框 return; } if(pwd.equals("")) { //提示输入不合法 JOptionPane.showMessageDialog(this, "密码输入不合法!", "系统提示", JOptionPane.INFORMATION_MESSAGE); //密码框获得焦点 passwordJPasswordField.requestFocus(); return; } else { //调用DBOperate类的方法进行判断,用户名及密码是否匹配 Java实现《通讯录》系统 2011年9月25日(印) if(DBOperate.check(user,pwd)) { //登录成功,显示主窗体,并传递登录‘用户名’作为实参 MainFrame mainframe=new MainFrame(user); mainframe.setVisible(true); //释放登录窗口 this.dispose(); } else { //登录失败,提示用户名或密码出错 JOptionPane.showMessageDialog(null, "用户名或密码有误,\n请检查是否无误再进行登录!", "系统提示",JOptionPane.ERROR_MESSAGE); //清空密码框 this.passwordClear(); //清空文本域 this.userNameClear(); return; } } } //如果事件源是注册按钮则进行相应操作 else if(e.getSource()==arrayJButton[1]) { Java实现《通讯录》系统 2011年9月25日(印) //判断文本域是否为空 if(user.equals("")) { //提示输入不合法 JOptionPane.showMessageDialog(this, "用户名不能为空!", "系统提示", JOptionPane.INFORMATION_MESSAGE); //清除文本域内容 this.userNameClear(); //文本域获得焦点 userNameJTextField.requestFocus(); //该句可防止用户名和密码均为空一次性弹出2个对话框 return; } //判断密码框是否为空 else if(pwd.equals("")) { //提示输入不合法 JOptionPane.showMessageDialog(this, "密码不能为空!", "系统提示", JOptionPane.INFORMATION_MESSAGE); //清除密码框内容 this.passwordClear(); //密码框获得焦点 passwordJPasswordField.requestFocus(); return; Java实现《通讯录》系统 2011年9月25日(印) } //判断注册用户是否存在 else { //判断注册的用户是否已经存在 sql="SELECT UserName FROM User WHERE UserName='"+user+"'"; if(DBOperate.isExist(sql)) { //注册用户已经存在,进行相应提示 JOptionPane.showMessageDialog(this, "对不起,注册失败!\n该用户已经存在!", "系统提示", JOptionPane.INFORMATION_MESSAGE); //清除密码框内容 this.passwordClear(); //清除文本域内容 this.userNameClear(); return; } else { //尝试捕获异常 try { //满足条件执行注册操作 sql="INSERT INTO User VALUES('" Java实现《通讯录》系统 2011年9月25日(印) +user+"','"+pwd+"')"; if(DBOperate.update(sql)>0) { //提示用户注册成功 JOptionPane.showMessageDialog(this, "恭喜你!\n注册成功!", "系统提示", JOptionPane.INFORMATION_MESSAGE); return; } } catch(Exception ex) { //打印出错误原因 ex.printStackTrace(); } } } } } //主方法 public static void main(String []args) { new LoginForm();//创建登陆窗体 Java实现《通讯录》系统 2011年9月25日(印) } } 主界面: 其他界面: Java实现《通讯录》系统 2011年9月25日(印) 系统菜单: 解锁: 源码: package sources; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.filechooser.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.tree.*; import java.io.*; public class MainFrame extends JFrame implements ActionListener,ItemListener { //定义锁定状态变量 private String lockState=""; //定义背景颜色对象 private Color bgColor=new Color(201,237,201); //定义字体颜色对象 Java实现《通讯录》系统 2011年9月25日(印) private Color foreColor=new Color(61,120,38); //定义字体对象 private Font font=new Font("宋体",Font.PLAIN,15); // *******************声明菜单组件*************** //菜单栏 private JMenuBar menubar=new JMenuBar(); //菜单 private JMenu systemMenu=new JMenu("系统(S)"); private JMenu helpMenu=new JMenu("帮助(H)"); //系统菜单项 private JMenuItem alterPasswordItem=new JMenuItem("修改密码(N)",'N'); private JMenuItem delUserItem=new JMenuItem("删除用户(D)",'D'); private JMenuItem lockItem=new JMenuItem("锁定(L)",'L'); private JMenuItem cancelItem=new JMenuItem("注销(W)",'W'); private JMenuItem exitItem=new JMenuItem("退出(X)",'X'); //帮助菜单项 private JMenuItem helpItem=new JMenuItem("帮助(H)" Java实现《通讯录》系统 2011年9月25日(印) ,'H'); private JMenuItem aboutItem=new JMenuItem("关于(A)",'A'); private String user=null;//当前用户的名字 private String perNameBefor=null;//编辑的时候之前的名字 private String perGroupBefor=null;//编辑的时候修改之前的分组 private boolean searchByName=true;//true则默认为按姓名查找 private boolean isInsert=false;//是否为添加默认为否 Image image=Toolkit.getDefaultToolkit().getImage("images\\txl_2.jpg");//得到图标对象 Icon icon = new ImageIcon(image); private JPanel jps=new JPanel();//界面上半部分的JPanel容器 private JButton jba=new JButton("添加"); private JButton jbs=new JButton("查找"); private JTextField jtfs=new JTextField();//按给出信息查找联系人信息 //选择查找方式的单选按钮 private JRadioButton jrbxm=new JRadioButton("按姓名查找" Java实现《通讯录》系统 2011年9月25日(印) ,true); private JRadioButton jrbbh=new JRadioButton("按编号查找"); private ButtonGroup bg=new ButtonGroup();//单选按钮组 private JPanel jpbr=new JPanel();//单选按钮面板 //界面左下的树 创建树模型 指定节点"联系人"为根节点 DefaultMutableTreeNode root= new DefaultMutableTreeNode(new NodeValue("联系人",0)); DefaultTreeModel dtm=new DefaultTreeModel(root); private JTree jtz=new JTree();//界面下半部分左边的JTree private JScrollPane jspz=new JScrollPane(jtz);//JTree的滚动条 private DefaultTreeCellRenderer dtcr=new DefaultTreeCellRenderer();//树节点的绘制器 private JPanel jpy=new JPanel();//界面下半部分右边界面,布局管理器为卡片布局 private JPanel jpyInfo=new JPanel();//右侧显示个人信息的面板 //界面下半部分右边的JPanel容器的个人信息栏目里的控件 private JLabel[] jlInfo={new JLabel("用户编号:"),new JLabel("姓名:"), new JLabel("性别:"),new JLabel("年龄:"), Java实现《通讯录》系统 2011年9月25日(印) new JLabel("电话号码:"),new JLabel("Email:"), new JLabel("所属组:"),new JLabel("更改照片:"), new JLabel("邮编:"),new JLabel("地址:"), new JLabel("添加相片"),new JLabel("")}; private JButton[] jbInfo={new JButton("编辑"),new JButton("保存"), new JButton("删除"),new JButton("浏览"), new JButton("添加分组"),new JButton("删除分组"), new JButton("浏览"),new JButton("上传"), new JButton("删除")}; //初始默认的一些分组 private String[] str={"朋友","同事","家庭","重要人士","其他"}; private JComboBox jcb=new JComboBox(str);//分组下拉列表控件 private JLabel jlPhoto=new JLabel();//显示图像的JLabel控件 private JTextField[] jtfInfo=new JTextField[10]; private JTextField jtfPhoto=new JTextField();//添加照片到相册的路径 Java实现《通讯录》系统 2011年9月25日(印) private JFileChooser jfcPic=new JFileChooser("f:\\");//上传图像的文件选择器 private JFileChooser jfcPho=new JFileChooser("f:\\");//上传照片的文件选择器 //性别部分 private JRadioButton jrbMale=new JRadioButton("男",true); private JRadioButton jrbFemale=new JRadioButton("女"); private ButtonGroup bgGender=new ButtonGroup(); private JPanel jpGender=new JPanel();//单选按钮面板 private JPanel jpyview=new JPanel();//右侧显示多幅照片的面板 private JScrollPane jspyview=new JScrollPane(jpyview);//滚动条 private JLabel jlDetail=new JLabel();//右侧显示一幅图片的标签 private JScrollPane jspydetail=new JScrollPane(jlDetail);//显示一幅图片标签的滚动条 private JLabel jlNoPic=new JLabel("您还没有为该联系人添加照片");//没有照片的显示JLabel //图片加载进度条部分 private JPanel jpProgress=new JPanel();//右侧显示图片加载进度的面板 Java实现《通讯录》系统 2011年9月25日(印) private JLabel jlProgress=new JLabel("预览图片加载中....."); private JProgressBar jpb=new JProgressBar(JProgressBar.HORIZONTAL,0,100); //选中不同树节点时的提示信息部分 private JLabel jlRoot=new JLabel(icon,JLabel.LEFT); private JLabel jlGroup=new JLabel();//分组节点的JLabel private CardLayout cl=new CardLayout();//创建卡片布局管理器 private JLabel[] jla=null;//照片缓冲数组 //分割窗口部分 //垂直分割(水平线分割)窗口对象 private JSplitPane jspOuter=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); //对一次分割后的上半部分进行二次垂直分割(水平线分割)对象 private JSplitPane jspInner1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,menubar,jps); //对一次分割后的下半部分进行二次水平分割(垂直线线分割)对象 private JSplitPane jspInner2=new JSplitPane(JSplitPane. Java实现《通讯录》系统 2011年9月25日(印) HORIZONTAL_SPLIT,jspz,jpy); //系统托盘部分 private PopupMenu popup=new PopupMenu(); private SystemTray tray; //定义SystemTray成员变量 private TrayIcon trayIcon; //定义TrayIcon成员变量 private MenuItem lockAndUnlockMainFrame=new MenuItem("锁 定");//定义菜单项 private MenuItem waitUser=new MenuItem("注 销");//定义菜单项 private MenuItem showMainFrame=new MenuItem("打开主面板");//定义菜单项 private MenuItem currently=new MenuItem("显示当前用户");//定义菜单项 private MenuItem exit=new MenuItem("退出系统");//定义菜单项 //主类构造函数 public MainFrame(String user) { //设置用户名 this.user=user; //初始化菜单系统 Java实现《通讯录》系统 2011年9月25日(印) this.initMenu(); //界面上半部分的搭建 this.initJps(); //初始化信息面板 this.initInfo(); //初始化卡片布局的面板 this.initJpy(); //添加系统托盘 this.initTray(); //初始化树 this.initTree(); //设置主窗体的图标、标题、大小以及可见性 Image image=Toolkit.getDefaultToolkit().getImage("images\\link.png");//得到图标对象 this.setIconImage(image); this.setTitle(user+"的通讯录"); this.setSize(650,550); //获取屏幕尺寸 Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth=screenSize.width; int srceenHeight=screenSize.height; //设置窗口居于屏幕中央 Java实现《通讯录》系统 2011年9月25日(印) setLocation((screenWidth-getWidth())/2,(srceenHeight-getHeight())/2); jtz.addTreeSelectionListener(//为树节点添加事件监听器 new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) {//重写valueChanged方法 DefaultMutableTreeNode cdmtn=//得到选中节点对象 (DefaultMutableTreeNode)e.getPath().getLastPathComponent(); NodeValue cnv=(NodeValue)cdmtn.getUserObject();//得到自定义节点对象 if(cnv.classCode==0) {//选中节点是根节点时 cl.show(jpy,"root"); } else if(cnv.classCode==1) {//选中节点是分组节点时 Java实现《通讯录》系统 2011年9月25日(印) String group=cnv.toString(); jlGroup.setText(group); cl.show(jpy,"group"); } else if(cnv.classCode==2) {//选中节点是某一联系人节点时 String sql="SELECT pid,pname,pgender,page,pnumber,pemail,pgroup,ppostalcode,"+ "padress FROM ContactInfo WHERE UserName='"+MainFrame.this.user+"'AND pname='"+cnv.toString()+"'"; setInfo(DBOperate.getPerInfo(sql));//从数据库得到此联系人信息并设置到信息面板 cl.show(jpy,"Info"); } else if(cnv.classCode==3) {//相册预览 jpyview.removeAll();//清空相册预览面板 cl.show(jpy,"tpyl");//显示相册预览面板 viewPic(cdmtn);//预览相册 } else if(cnv.classCode==4) Java实现《通讯录》系统 2011年9月25日(印) {//图片明细 cl.show(jpy,"tpmx");//显示图片明细面板 NodeValue pnv=//得到选中照片的自定义节点对象 (NodeValue)((DefaultMutableTreeNode)cdmtn).getUserObject(); detailPic(pnv.value);//点击某一张图片 } } }); //设置垂直分割窗体的位置 jspOuter.setDividerLocation(80); //设置窗体被垂直分割后上半部分的组件(这里参数为再次进行垂直分割的对象) jspOuter.setTopComponent(jspInner1); //设置窗体被垂直分割后下半部分的组件(这里参数为再次进行水平分割的对象) jspOuter.setBottomComponent(jspInner2); //设置水平分割窗体的位置 jspInner1.setDividerLocation(26); jspInner2.setDividerLocation(150); //设置垂直分割窗体的宽度 Java实现《通讯录》系统 2011年9月25日(印) jspOuter.setDividerSize(0); //设置水平分割窗体的宽度 jspInner2.setDividerSize(4); //将分割窗体添加到主窗体 this.add(jspOuter); //设置窗体关闭按钮执行的动作 this.addWindowListener( new WindowAdapter() { public void WindowClosing(WindowEvent e) { //将窗体隐藏 MainFrame.this.setVisible(false); } } ); //显示窗口 this.setVisible(true); } //初始化菜单系统方法 public void initMenu() { //设置菜单快捷键 systemMenu.setMnemonic('S'); Java实现《通讯录》系统 2011年9月25日(印) helpMenu.setMnemonic('H'); //设置加速键 alterPasswordItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); //Ctrl+N delUserItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK)); //Ctrl+D lockItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK)); //Ctrl+L cancelItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,InputEvent.CTRL_MASK)); //Ctrl+W exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); //Ctrl+X helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent. Java实现《通讯录》系统 2011年9月25日(印) VK_H,InputEvent.CTRL_MASK)); //Ctrl+H aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.ALT_MASK)); //Alt+A //为每个菜单项注册事件监听器 alterPasswordItem.addActionListener(this); delUserItem.addActionListener(this); lockItem.addActionListener(this); cancelItem.addActionListener(this); exitItem.addActionListener(this); helpItem.addActionListener(this); aboutItem.addActionListener(this); //为每个菜单栏、菜单、菜单项设置背景色 menubar.setBackground(bgColor); systemMenu.setBackground(bgColor); helpMenu.setBackground(bgColor); alterPasswordItem.setBackground(bgColor); delUserItem.setBackground(bgColor); lockItem.setBackground(bgColor); cancelItem.setBackground(bgColor); Java实现《通讯录》系统 2011年9月25日(印) exitItem.setBackground(bgColor); helpItem.setBackground(bgColor); aboutItem.setBackground(bgColor); //为每个菜单栏、菜单、菜单项设置字体颜色 menubar.setForeground(foreColor); systemMenu.setForeground(foreColor); helpMenu.setForeground(foreColor); alterPasswordItem.setForeground(foreColor); delUserItem.setForeground(foreColor); lockItem.setForeground(foreColor); cancelItem.setForeground(foreColor); exitItem.setForeground(foreColor); helpItem.setForeground(foreColor); aboutItem.setForeground(foreColor); //为每个菜单栏、菜单、菜单项设置字体 Font menuFont=new Font("宋体",Font.PLAIN,13); menubar.setFont(menuFont); systemMenu.setFont(menuFont); helpMenu.setFont(menuFont); Java实现《通讯录》系统 2011年9月25日(印) alterPasswordItem.setFont(menuFont); delUserItem.setFont(menuFont); lockItem.setFont(menuFont); cancelItem.setFont(menuFont); exitItem.setFont(menuFont); helpItem.setFont(menuFont); aboutItem.setFont(menuFont); //将相应菜单项添加到‘系统’菜单 systemMenu.add(alterPasswordItem); systemMenu.add(delUserItem); systemMenu.add(lockItem); systemMenu.add(cancelItem); systemMenu.add(exitItem); //将相应菜单项添加到‘帮助’菜单 helpMenu.add(helpItem); helpMenu.add(aboutItem); //将‘系统’菜单添加到菜单栏 menubar.add(systemMenu); //将‘帮助’菜单添加到菜单栏 menubar.add(helpMenu); } Java实现《通讯录》系统 2011年9月25日(印) public void initJps() {//界面上半部分的初始化 jps.setLayout(null);//设置jps布局管理器为null jps.setBackground(bgColor); //设置按钮大小并添加到JPanel面板里 jba.setBounds(5,10,80,26); jba.setFont(font); jba.setForeground(foreColor); jba.addActionListener(this);//为添加按钮注册事件监听器 jps.add(jba);//添加按钮到jps面板里 jbs.setBounds(90,10,80,26); jbs.setFont(font); jbs.setForeground(foreColor); jbs.addActionListener(this);//为查找按钮注册事件监听器 jps.add(jbs);//添加按钮到jps面板里 //设置jtfs文本框大小并添加到jps面板里 jtfs.setBounds(175,10,120,26); jtfs.addActionListener(this);//为文本框注册事件监听器 jps.add(jtfs); //设置单选按钮大小和位置并添加到jpbr面板里同时添加到bg单选按钮组里 Java实现《通讯录》系统 2011年9月25日(印) jrbxm.setBounds(5,0,50,26); jrbxm.setBackground(bgColor); jrbxm.setForeground(foreColor); jrbxm.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbxm); jpbr.add(jrbxm); jrbbh.setBounds(60,0,50,26); jrbbh.setBackground(bgColor); jrbbh.setForeground(foreColor); jrbbh.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbbh); jpbr.add(jrbbh); jpbr.setBounds(300,8,200,28); jpbr.setBackground(bgColor); jpbr.setFont(font); jps.add(jpbr); } public void initTree() {//初始化树 //设置背景色及字体色和字体 jtz.setBackground(bgColor); jtz.setForeground(foreColor); jtz.setFont(font); Java实现《通讯录》系统 2011年9月25日(印) jtz.setModel(dtm);//设置树模型 jtz.setExpandsSelectedPaths(true);//设置树ExpandsSelectedPaths属性 jtz.setCellRenderer(dtcr);//设置树的节点绘制器 ImageIcon icon=new ImageIcon("images\\wzk.png");//得到树节点关闭的图标 dtcr.setClosedIcon(icon);//设置树节点关闭的图标 icon=new ImageIcon("images\\zk.png");//得到树节点展开的图标 dtcr.setOpenIcon(icon);//设置树节点展开的图标 icon=new ImageIcon("images\\mzjd.png");//得到树的叶子节点的图标 dtcr.setLeafIcon(icon);//设置树的叶子节点的图标 Vector group=DBOperate.getNode(user,"uid");//从数据库得有多少个分组 for(int i=0;i pnode=DBOperate.getNode(user,"pname;"+s); for(String person:pnode) { dmtnGroup.add(this.initPerNode(person));//将各个分组下的联系人节点添加到分组节点 } } } public void initJpy() {//界面右边为卡片布局的JPanel里一些控件的添加 jpy.setLayout(cl); //设置背景色 jpy.setBackground(bgColor); //设置选中根节点显示信息格式并添加到面板 jlRoot.setFont(new Font("Courier",Font.PLAIN,22)); jlRoot.setHorizontalAlignment(JLabel.CENTER); jlRoot.setVerticalAlignment(JLabel.CENTER); jpy.add("root",jlRoot);//添加根节点显示信息 jpy.add("Info",jpyInfo);//添加联系人信息面板 //设置选中分组节点显示信息格式并添加到面板 jlGroup.setFont(new Font("楷体_GB2312",Font.BOLD,40)); Java实现《通讯录》系统 2011年9月25日(印) jlGroup.setForeground(foreColor); jlGroup.setHorizontalAlignment(JLabel.CENTER); jlGroup.setVerticalAlignment(JLabel.CENTER); jpy.add("group",jlGroup);//添加分组节点显示信息 //初始化图片预览界面并添加到面板 jpyview.setBackground(Color.black);//设置背景色为黑色 jpyview.setLayout(new FlowLayout(FlowLayout.LEFT)); jpy.add("tpyl",jspyview); //设置相册没有照片时提示信息格式并添加到面板 jlNoPic.setFont(new Font("楷体_GB2312",Font.BOLD,40)); jlNoPic.setForeground(foreColor); jlNoPic.setHorizontalAlignment(JLabel.CENTER); jlNoPic.setVerticalAlignment(JLabel.CENTER); jpy.add("nopic",jlNoPic); //初始化图片明细界面并添加到面板 jlDetail.setOpaque(true); jlDetail.setBackground(Color.black);//设置背景色为黑色 jlDetail.setVerticalAlignment(JLabel.CENTER); jlDetail.setHorizontalAlignment(JLabel.CENTER); jpy.add("tpmx",jspydetail); //初始化图片加载进度界面 Java实现《通讯录》系统 2011年9月25日(印) jpy.add("tpjd",jpProgress); jpProgress.setLayout(null); jpProgress.setBackground(bgColor); jlProgress.setBounds(20,20,250,50);//设置大小和位置 jlProgress.setFont(new Font("楷体_GB2312",Font.PLAIN,25)); jlProgress.setForeground(foreColor); jpProgress.add(jlProgress);//添加进度条 jpb.setBounds(20,70,400,50);//设置大小和位置 jpb.setBackground(new Color(208,244,247));//设置进度条背景色 jpb.setFont(new Font("楷体_GB2312",Font.PLAIN,25));//设置进度显示百分比的字体 jpProgress.add(jpb); jpb.setBorderPainted(true);//设置进度条边框显示 jpb.setStringPainted(true);//设置进度条字符显示 } public void initInfo() {//初始化信息界面 //设置信息面板背景色 jpyInfo.setBackground(bgColor); jpyInfo.setLayout(null);//设置布局管理器为空 Java实现《通讯录》系统 2011年9月25日(印) jpyInfo.setBounds(50,50,380,360);//设置信息面板的大小和位置 jlPhoto.setBounds(220,10,150,170);//设置联系人图像JLabel的大小和位置 jlPhoto.setBorder(BorderFactory.createLineBorder(Color.BLACK));//将JLbel的边框线显现出来 jpyInfo.add(jlPhoto);//将显示联系人照片的JLabel添加到信息面板 for(int i=0;i<10;i++)//添加文本标签,并设置大小和位置 { jlInfo[i].setBounds(20,10+i*30,60,26); //设置标签文本颜色 jlInfo[i].setForeground(foreColor); jpyInfo.add(jlInfo[i]); } //添加相片部分的控件 jlInfo[10].setBounds(20,360,60,26); //设置标签文本颜色 jlInfo[10].setForeground(foreColor); jpyInfo.add(jlInfo[10]); //上传照片张数进度提醒 jlInfo[11].setBounds(270,395,300,30); Java实现《通讯录》系统 2011年9月25日(印) jlInfo[11].setFont(font); jlInfo[11].setForeground(Color.RED); jpyInfo.add(jlInfo[11]); jtfPhoto.setBounds(80,360,200,26);//设置得到照片路径的文本框的大小和位置 //设置照片路径的文本框文本颜色 jtfPhoto.setForeground(foreColor); jpyInfo.add(jtfPhoto);//将得到照片路径的文本框添加到信息面板 jbInfo[6].setBounds(285,360,80,26); //设置标签文本颜色 jbInfo[6].setForeground(foreColor); jbInfo[6].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[6]); //设置文件选择器的几种选择文件格式 jfcPho.addChoosableFileFilter(new FileNameExtensionFilter("GIF图片文件","gif","GIF")); jfcPho.addChoosableFileFilter(new FileNameExtensionFilter("PNG图片文件","png","PNG")); jfcPho.addChoosableFileFilter(new FileNameExtensionFilter("JPEG图片文件","jpg","jpeg")); Java实现《通讯录》系统 2011年9月25日(印) for(int i=0;i<10;i++) {//初始化一些文本框 jtfInfo[i]=new JTextField(); //设置文本框颜色 jtfInfo[i].setForeground(foreColor); } for(int i=1;i<7;i++) {//设置一些类似文本框的位置 if(i!=2&i!=6) { jtfInfo[i].setBounds(80,10+i*30,135,26); //设置文本框颜色 jtfInfo[i].setForeground(foreColor); jtfInfo[i].addActionListener(this);//为文本框注册事件监听器 jpyInfo.add(jtfInfo[i]);//将文本框添加到信息面板 } } //性别部分 jrbMale.setBounds(5,3,50,26); //设置单选按钮背景色 jrbMale.setBackground(bgColor); //设置单选按钮文本颜色 jrbMale.setForeground(foreColor); Java实现《通讯录》系统 2011年9月25日(印) jrbMale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbMale); jpGender.add(jrbMale); jrbFemale.setBounds(60,3,50,26); //设置单选按钮背景色 jrbFemale.setBackground(bgColor); //设置单选按钮文本颜色 jrbFemale.setForeground(foreColor); jrbFemale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbFemale); jpGender.add(jrbFemale); jpGender.setBounds(60,70,125,26); //设置单选按钮容器背景色 jpGender.setBackground(bgColor); jpyInfo.add(jpGender); //将单选按钮的面板jpbr添加到jps里 //分组 jcb.setBounds(80,190,75,26); //设置下拉列表框背景色 jcb.setBackground(bgColor); //设置下拉列表框文本颜色 jcb.setForeground(foreColor); jcb.setEditable(false);//设置分组文本为不可编辑 Java实现《通讯录》系统 2011年9月25日(印) this.initGroup();//初始话分组下拉列表框 jcb.setSelectedIndex(4);//默认选择的是其他分组 jpyInfo.add(jcb);//将分组下拉列表框添加到信息面板 for(int i=0;i<2;i++)//添加分组删除分组按钮 { jbInfo[4+i].setBounds(175+100*i,190,90,26); //设置按钮文本颜色 jbInfo[4+i].setForeground(foreColor); jbInfo[4+i].addActionListener(this);//为按钮注册事件监听器 jpyInfo.add(jbInfo[4+i]); } //用户编号 jtfInfo[0].setBounds(80,10,135,26); jpyInfo.add(jtfInfo[0]); //更改图像 jtfInfo[7].setBounds(80,220,200,26); jpyInfo.add(jtfInfo[7]); jbInfo[3].setBounds(285,220,80,26); //设置按钮文本颜色 jbInfo[3].setForeground(foreColor); jbInfo[3].addActionListener(this);//为按钮注册事件监听器 jpyInfo.add(jbInfo[3]);//将添加图像的浏览按钮添加到信息面板 Java实现《通讯录》系统 2011年9月25日(印) //设置文件选择器的几种选择文件格式 jfcPic.addChoosableFileFilter(new FileNameExtensionFilter("GIF图片文件","gif","GIF")); jfcPic.addChoosableFileFilter(new FileNameExtensionFilter("PNG图片文件","png","PNG")); jfcPic.addChoosableFileFilter(new FileNameExtensionFilter("JPEG图片文件","jpg","jpeg")); //邮编文本框的添加 jtfInfo[8].setBounds(80,250,135,26); jpyInfo.add(jtfInfo[8]); //地址文本框的添加 jtfInfo[9].setBounds(80,280,285,26); jpyInfo.add(jtfInfo[9]); //编辑 保存 删除 等按钮 for(int i=0;i<3;i++) { jbInfo[i].setBounds(80+i*100,320,80,26); //设置按钮文本颜色 jbInfo[i].setForeground(foreColor); jbInfo[i].addActionListener(this);//为按钮注册事件监听器 jpyInfo.add(jbInfo[i]); } Java实现《通讯录》系统 2011年9月25日(印) for(int i=0;i<2;i++) {//上传和删除按钮 jbInfo[7+i].setBounds(80+i*100,395,80,26); //设置按钮文本颜色 jbInfo[7+i].setForeground(foreColor); jbInfo[7+i].addActionListener(this);//为按钮注册事件监听器 jpyInfo.add(jbInfo[7+i]); } } public void initGroup()//初始化分组下拉列表 { Vector v=DBOperate.getNode(user,"uid");//得到所有分组列表 boolean b=false;//记录下拉列表中是否存在已有的选项 for(int i=0;i pphoto=DBOperate.getNode(user,person);//得到该用户下该联系人的相册照片名称列表 for(String photo:pphoto) { DefaultMutableTreeNode Photo=//生成照片节点 new DefaultMutableTreeNode(new NodeValue(photo,4)); Java实现《通讯录》系统 2011年9月25日(印) dmtnPhoto.add(Photo);//添加到相册节点上 } return dmtnPerson;//返回生成的节点 } public void clearInfo()//清空信息面板 { for(int i=0;i<10;i++) { jtfInfo[i].setText("");//清空文本框 } jlPhoto.setIcon(null);//清空图像 jcb.setSelectedItem("其他");//设置分组选择“其它分组” } public void setInfo(Vector pInfo)//将信息向量设置到信息面板中 {//将信息向量按规则填到信息面板里 this.clearInfo(); if(pInfo.size()==0) { JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { Java实现《通讯录》系统 2011年9月25日(印) for(int i=0;i<2;i++) {//显示联系人编号和姓名 jtfInfo[i].setText(pInfo.get(i)); } if(pInfo.get(2).equals("男")) {//显示性别 jrbMale.setSelected(true); } else {//显示性别 jrbFemale.setSelected(true); } for(int i=3;i<6;i++) {//显示年龄、电话号码和电子邮件 jtfInfo[i].setText(pInfo.get(i)); } for(int i=7;i<9;i++) {//显示邮编和地址 jtfInfo[i+1].setText(pInfo.get(i)); } jcb.setSelectedItem(pInfo.get(6)); //设置分组信息 this.setPic(pInfo.get(0));//设置图像为从数据库得到的图像 this.setEditable(false);//设置面板不可编辑 Java实现《通讯录》系统 2011年9月25日(印) } } public void setPic(String pid)//设置个人图像显示 { final int width=145;//显示图像的JLabel的宽度 final int height=165;//显示图像的JLabel的高度 String sql="SELECT pphoto FROM ContactInfo WHERE pid='"+pid+"'"; Image Pic=DBOperate.getPic(sql);//从数据库得到此人的图像 if(Pic!=null) {//如果此联系人上传了图像 int pw=Pic.getWidth(MainFrame.this);//得到此人图像的宽度 int ph=Pic.getHeight(MainFrame.this);//得到此人图像的高度 if(pw>ph) {//宽度大于高度,图像进行缩放 Pic=Pic.getScaledInstance(width,height,Image.SCALE_SMOOTH); } else {//高度大于宽度,图像进行缩放 Pic=Pic Java实现《通讯录》系统 2011年9月25日(印) .getScaledInstance(width,height,Image.SCALE_SMOOTH); } jlPhoto.setIcon(new ImageIcon(Pic));//将图像显示到JLabel jlPhoto.setHorizontalAlignment(JLabel.CENTER);//设置图片水平居中显示 jlPhoto.setVerticalAlignment(JLabel.CENTER);//设置图片垂直方向居中显示 } else {//如果图像为空,则不显示 jlPhoto.setIcon(null); } } public void setEditable(boolean Editable)//设置信息窗口是否可编辑 { jrbFemale.setEnabled(Editable);//设置性别是否可编辑 jrbMale.setEnabled(Editable);//设置性别是否可编辑 jcb.setEnabled(Editable);//设置下拉列表框是否可编辑 for(int i=0;i<10;i++) Java实现《通讯录》系统 2011年9月25日(印) { jtfInfo[i].setEditable(Editable);//设置文本框是否可编辑 if(i>=3&&i<=5) { jbInfo[i].setEnabled(Editable);//设置部分按钮是否可编辑 } } jbInfo[1].setEnabled(Editable);//设置保存按钮是否可编辑 } public Vector getInfo()//从信息面板得到用户输入的信息 { Vector pInfo=new Vector(); pInfo.add(jtfInfo[0].getText().trim());//添加pid pInfo.add(jtfInfo[1].getText().trim());//添加pname String gender=jrbMale.isSelected()?"男":"女"; pInfo.add(gender);//添加性别 pInfo.add(jtfInfo[3].getText().trim());//年龄 pInfo.add(jtfInfo[4].getText().trim());//电话号码 pInfo.add(jtfInfo[5].getText().trim());//Email pInfo.add((String)jcb.getSelectedItem());//分组 Java实现《通讯录》系统 2011年9月25日(印) pInfo.add(jtfInfo[8].getText().trim());//邮编 pInfo.add(jtfInfo[9].getText().trim());//地址 String photoPath=jtfInfo[7].getText().trim();//得到照片路径 pInfo.add(photoPath);//照片路径 return pInfo; } //***************分组管理****************** public void monitorAddGroupButton()//监听添加分组按钮 { String group=JOptionPane.showInputDialog(this,"请输入分组:","添加分组", JOptionPane.PLAIN_MESSAGE); if(group!=null) {//group不等于null的情况 if(group.equals("")) {//输入分组是空值 JOptionPane.showMessageDialog(this,"名称不能为空","错误", JOptionPane.WARNING_MESSAGE); } else {//分组名不为空 int count=jcb.getItemCount();//得到分组下拉选项的个数 Java实现《通讯录》系统 2011年9月25日(印) for(int i=0;i=0) { JOptionPane.showMessageDialog(this,"删除分组成功,共删除联系人" Java实现《通讯录》系统 2011年9月25日(印) + count+"个!!!","消息",JOptionPane.INFORMATION_MESSAGE); } this.clearInfo();//清空信息面板 } } public void delGroupNode(String group) {//删除分组节点 for(int i=0;iph)//宽度大 { photo[i]=photo[i].getScaledInstance(width,width*ph/pw,Image. Java实现《通讯录》系统 2011年9月25日(印) SCALE_SMOOTH); } else//高度大 { photo[i]=photo[i].getScaledInstance(height*pw/ph,height,Image.SCALE_SMOOTH); } jla[i]=new JLabel(new ImageIcon(photo[i]));//将缩放后的图片添加到JLabel中 jla[i].setPreferredSize(new Dimension(width,height));//设置JLabel的高度和宽度 jla[i].setToolTipText(pname[i]);//设置照片弹出气球文本字符串 MouseAdapter ma=new MouseAdapter()//添加鼠标监听器 { public void mouseClicked(MouseEvent e) {//点击一张图片,就是图片明细 JLabel tjl=(JLabel)e.getSource(); detailPic(tjl.getToolTipText()); Java实现《通讯录》系统 2011年9月25日(印) } public void mouseEntered(MouseEvent e) {//鼠标移上图片,高亮显示 JLabel tjl=(JLabel)e.getSource(); tjl.setBorder(new MyBorder()); } public void mouseExited(MouseEvent e) {//鼠标移出,高亮效果消失 JLabel tjl=(JLabel)e.getSource(); tjl.setBorder(null); } }; jla[i].addMouseListener(ma);//注册事件监听器 jla[i].addMouseMotionListener(ma);//注册事件监听器 jpb.setValue(90*i/pcount);//设置进度条显示 jpb.setString(90*i/pcount+"%");//设置进度条字符串显示 Java实现《通讯录》系统 2011年9月25日(印) } nv.jla=jla;//将图片JLabel数组赋值给nv的图片缓冲数组 } else {//没有新照片添加进来时使用以前加载好的 jla=nv.jla; } //得到当前jspview的Dimension对象 Dimension tempD=jspyview.getViewportBorderBounds().getBounds().getSize(); int tw=(int)tempD.getWidth();//得到当前jspview的宽度 int perLine=tw/(span+width);//计算每行显示多少幅照片 int rowc=jla.length/perLine+((jla.length%perLine==0)?0:1);//计算显示照片需要多少行 int th=rowc*(span+height)+span;//计算显示所有照片时预览窗体的高度 jpyview.setPreferredSize(new Dimension(tw,th));//重新设置jpyview的宽度和高度 for(int i=0;i0) { //提示密码修改成功 JOptionPane.showMessageDialog(this,"恭喜您!!!\n密码修改成功,请使用新密码!!!","系统提示",JOptionPane.INFORMATION_MESSAGE); } } else { //两次新密码输入不同,弹出提示,并返回 JOptionPane.showMessageDialog(this,"修改失败!!!\n两次输入不一致!","错误",JOptionPane.WARNING_MESSAGE); } } } } else { //提示验证失败 JOptionPane.showMessageDialog(this,"密码验证失败!!!" Java实现《通讯录》系统 2011年9月25日(印) ,"错误",JOptionPane.ERROR_MESSAGE); } } //删除用户方法 public void delUser() { //定义用户名和密码,以此作为参数调用DBOperate类得静态方法来判断审核是否成功 String user=this.user; String pwd; //弹出输入框以输入验证密码 pwd=JOptionPane.showInputDialog(null, "请验证用户 - "+user+" - 密码:"); //判断验证(利用已定义的两个参数调用方法验证) if(DBOperate.check(user, pwd)) { //提示用户是否确定删除 int yn=JOptionPane.showConfirmDialog(this,"删除用户后联系人信息将不可恢复...\n请确认\n是否删除?","删除", JOptionPane.YES_NO_OPTION); //如果用户确认删除,执行删除 Java实现《通讯录》系统 2011年9月25日(印) if(yn==JOptionPane.YES_OPTION) { //定义返回删除条数变量 int count=DBOperate.delUser(user); //提示删除成功,并提示删除了几条联系人信息 JOptionPane.showMessageDialog(this,"删除成功!!!\n用户 - "+user+" - 共删除了"+count+"个联系人!!!","系统提示",JOptionPane.INFORMATION_MESSAGE); //提示用户不存在,强制退出系统 JOptionPane.showMessageDialog(this,"系统强制退出!!!\n用户 - "+user+" - 不存在,请注册!!!", "系统提示",JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } else { //提示验证失败 JOptionPane.showMessageDialog(this,"密码验证失败!!!","错误",JOptionPane.WARNING_MESSAGE); } } Java实现《通讯录》系统 2011年9月25日(印) //锁定方法 public void lock() { //关闭窗口 this.dispose(); //让系统托盘打开主面板不可用,锁定项改为‘解锁’ lockAndUnlockMainFrame.setLabel("解 锁"); showMainFrame.setEnabled(false); //改变锁定状态字符串变量 lockState="locked"; //弹出提示 JOptionPane.showMessageDialog(this,"用户 - "+user+" - 的通讯录已锁定\n您可以通过右下角的系统托盘来解锁!", "系统提示",JOptionPane.INFORMATION_MESSAGE); } //打开帮助方法 public void openHelp() { Java实现《通讯录》系统 2011年9月25日(印) } // ******************系统托盘相关方法*************** //锁定和解锁方法 public void lockAndUnlock() { //判断锁定状态 if(lockState=="locked") //状态为已锁定,则执行解锁操作 { //定义解锁码变量 String pwd=""; //弹出解锁密码输入窗口 pwd=JOptionPane.showInputDialog(null,"请输入解锁密码\n即: "+this.user+" 的用户密码"); if(DBOperate.check(this.user, pwd)) { //锁码验证成功,执行解锁 this.setVisible(true); //让系统托盘打开主面板可用,解锁项改为‘锁定’ Java实现《通讯录》系统 2011年9月25日(印) lockAndUnlockMainFrame.setLabel("锁 定"); showMainFrame.setEnabled(true); //更改锁定状态字符串变量 lockState="unlock"; } else { //提示锁码错误 JOptionPane.showMessageDialog(this,"锁码错误!!!","错误",JOptionPane.ERROR_MESSAGE); } } else //状态为未锁定,则执行锁定操作 { //调用前面已定义方法锁定 this.lock(); } } //注销用户方法 public void waitUser() { int getSure=JOptionPane.showConfirmDialog(null, "你确认注销么?", "系统提示", JOptionPane.YES_NO_OPTION, JOptionPane. Java实现《通讯录》系统 2011年9月25日(印) INFORMATION_MESSAGE); //判断用户选择情况 if(getSure==JOptionPane.YES_OPTION) //用户选择‘是’,执行注销操作 { //关闭当前用户联系人管理窗口 this.dispose(); //声明重新登录窗口对象 LoginForm loginframe=new LoginForm(); //显示窗口 loginframe.setVisible(true); } } // **************************监听器相关方法*************************** //单选按钮监听方法 @Override //声明此方法为重写方法 public void itemStateChanged(ItemEvent e) { if(e.getSource()==jrbxm) {//按姓名查找 设置flag为true this.searchByName=true;System.out.println("按姓名查找" Java实现《通讯录》系统 2011年9月25日(印) ); } else if(e.getSource()==jrbbh) {//按编号查找,设置flag为false this.searchByName=false;System.out.println("按编号查找"); } } //行为监听方法 @Override //声明此方法为重写方法 public void actionPerformed(ActionEvent e) { if(e.getSource()==jbInfo[4]) {//调用监听添加分组的方法 this.monitorAddGroupButton(); } else if(e.getSource()==jbInfo[5]) {//调用监听删除分组的方法 this.monitorDelGroupButton(); } else if(e.getSource()==jbInfo[3]) {//打开图像文件路径 jfcPic.showOpenDialog(this); if(jfcPic.getSelectedFile()!=null) { Java实现《通讯录》系统 2011年9月25日(印) jtfInfo[7].setText(""+jfcPic.getSelectedFile()); } } else if(e.getSource()==jbInfo[6]) {//打开照片路径 jfcPho.setMultiSelectionEnabled(true);//允许多选 jfcPho.showOpenDialog(this);//打开文件选择框 if(jfcPho.getSelectedFiles()!=null) { File[] f=jfcPho.getSelectedFiles();//取得选择的文件列表 String pathStr="";//记录迭代出的文件路径列表 for(int i=0;i getNode(String user,String condition) { //根据登陆用户和条件得到节点名称 Vector node=new Vector(); //拆分条件的正则表达式 String patternStr=";"; //按条件将condition字符串进行拆分 Java实现《通讯录》系统 2011年9月25日(印) String[] scon=condition.split(patternStr); try { //得到数据库连接 con=getConnection(); //创建语句对象 stat=con.createStatement(); if(scon.length==1&&scon[0].equals("uid")) { //得到当前用户下有多少个分组 rs=stat.executeQuery("SELECT DISTINCT pgroup FROM ContactInfo WHERE UserName='"+user.trim()+"'"); } else if(scon.length==1) { //得到当前联系人下相册里照片名列表 rs=stat.executeQuery("SELECT photoname FROM Photo WHERE pid = "+ "(SELECT pid FROM ContactInfo WHERE UserName='"+user.trim()+"'AND pname='"+scon[0].trim()+"')"); } else if(scon.length==2) { //得到分组里的联系人姓名列表 rs=stat.executeQuery("SELECT pname FROM ContactInfo WHERE UserName='" Java实现《通讯录》系统 2011年9月25日(印) +user.trim()+"'AND pgroup='"+scon[1].trim()+"'"); } while(rs.next()) { //组织成Vector返回 String s=rs.getString(1); node.add(s); } } catch(Exception e) { //打印异常信息 e.printStackTrace(); } finally { //关闭数据库连接 DBOperate.closeCon(); } //返回结果列表 return node; } public static int delUser(String UserName)//删除用户 Java实现《通讯录》系统 2011年9月25日(印) { int count=0;//设置返回值 Vector vpid=new Vector();//存放pid的集合 一个用户对应多个联系人 try { con=DBOperate.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("SELECT pid FROM ContactInfo WHERE UserName='"+UserName+"'");//得到每个联系人的ID while(rs.next()) { String pid=rs.getString(1);//得到用户下的pid vpid.add(pid);//添加进联系人集合 } stat=con.createStatement();//重新创建语句对象 for(String s:vpid) {//循环删除每个联系人的相册 stat.executeUpdate("DELETE FROM photo WHERE pid='"+s+"'"); } //在联系人ContactInfo表中删除每个联系人 count=stat.executeUpdate("DELETE FROM ContactInfo WHERE UserName='" Java实现《通讯录》系统 2011年9月25日(印) +UserName+"'"); //在用户表中删除用户 stat.executeUpdate("DELETE FROM user WHERE UserName='"+UserName+"'"); } catch(Exception e) { e.printStackTrace(); } finally{DBOperate.closeCon();}//关闭数据库连接 return count;//返回删除了多少个联系人 } // ********************分组************************** public static int delGroup(String user,String group) { int count=0; Vector vpid=new Vector();//一个分组对应多个联系人 try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("SELECT pid FROM ContactInfo WHERE pgroup='" Java实现《通讯录》系统 2011年9月25日(印) +group+"'" +"AND UserName='"+user+"'");//从数据库中搜索到group组里的pid while(rs.next()) { String pid=rs.getString(1);//得到用户下的pid循环删除photo表中pid下的照片 vpid.add(pid);//添加该分组下联系人名称到集合 } stat=con.createStatement();//创建语句对象 for(String s:vpid) {//循环删除每个联系人的相册 stat.executeUpdate("DELETE FROM photo WHERE pid='"+s+"'"); } //在联系人ContactInfo表中删除每个联系人 count=stat.executeUpdate("DELETE FROM ContactInfo WHERE pgroup='"+group+"'"); } catch(Exception e) { e.printStackTrace(); } return count;//返回删除联系人数目 } // *******************联系人*********************** Java实现《通讯录》系统 2011年9月25日(印) public static String insertPerson(String UserName,Vector pInfo) { String isPathNull="isNotNull";//传过来的图像是不是合法,默认不为空 try{ con=getConnection();//得到数据库连接 if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//照片路径为空,则不插入图像 psInsert=con.prepareStatement("INSERT into ContactInfo(pid,pname,pgender,page,pnumber,"+ "pemail,pgroup,ppostalcode,padress,UserName)"+ "VALUES(?,?,?,?,?,?,?,?,?,?)"); } else {//照片路径不为空,则插入图像 psInsert=con.prepareStatement("INSERT into ContactInfo(pid,pname,pgender,page,pnumber,"+ "pemail,pgroup,ppostalcode,padress,UserName,pphoto)"+ "VALUES(?,?,?,?,?,?,?,?,?,?,?)" ); Java实现《通讯录》系统 2011年9月25日(印) File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(11,b);//设置pphoto参数的数据 } for(int i=0;i<9;i++) {//设置公共信息 psInsert.setString(i+1,pInfo.get(i)); } psInsert.setString(10,UserName);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//图片路径不对 catch(Exception e){e.printStackTrace();} finally{DBOperate.closeCon();}//关闭数据库连接 return isPathNull; } Java实现《通讯录》系统 2011年9月25日(印) public static String updatePerson(String UserName,Vector pInfo) { String isPathNull="isNotNull";//传过来的path是不是合法 try{ con=getConnection(); if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//更新时候,如果照片路径为空,则不更新图像 psInsert=con.prepareStatement("update ContactInfo set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,UserName=? WHERE pid='" Java实现《通讯录》系统 2011年9月25日(印) +pInfo.get(0).trim()+"'"); } else {//如果照片路径不为空,则更新图像 psInsert=con.prepareStatement("update ContactInfo set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,UserName=?,pphoto=? WHERE pid='" Java实现《通讯录》系统 2011年9月25日(印) +pInfo.get(0).trim()+"'"); File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(10,b); } for(int i=1;i<9;i++){//设置公共的信息部分 psInsert.setString(i,pInfo.get(i)); } psInsert.setString(9,UserName);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 Java实现《通讯录》系统 2011年9月25日(印) } catch(FileNotFoundException fnfe){isPathNull="isNull";}//路径不合法 catch(Exception e){e.printStackTrace();} finally{DBOperate.closeCon();}//关闭连接 return isPathNull; } public static Vector getPerInfo(String sql)//得到联系人信息 { Vector pInfo=new Vector(); try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 while(rs.next()) { for(int i=1;i<10;i++) { pInfo.add(rs.getString(i));//将联系人信息添加到返回向量 } } } Java实现《通讯录》系统 2011年9月25日(印) catch(Exception e) { e.printStackTrace(); } finally{DBOperate.closeCon();}//关闭数据库连接 return pInfo;//返回信息集合 } public static Image getPic(String sql) { Image i=null;//声明Image对象引用 try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行SQL语句 while(rs.next()) { byte[] buff=rs.getBytes(1);//得到图像数据 if(buff!=null)//如果数据存在 { i=(new ImageIcon(buff)).getImage();//转换成ImageIcon对象 } } } catch(Exception e) Java实现《通讯录》系统 2011年9月25日(印) { e.printStackTrace();//打印异常信息 } finally {//关闭数据库连接 DBOperate.closeCon(); } return i; } // *****************************照 片**************************** public static int insertPic(String path,String pid) {//flag=0表示上传成功 1表示找不到文件 2表示文件已经存在 int flag=0; File f=new File(path);//获取选取的图片文件 try { con=getConnection();//得到数据库连接 psInsert=con.prepareStatement("INSERT into photo VALUES(?,?,?)"); byte[] b=new byte[(int)f.length()];//创建存储照片数据的数组 FileInputStream fin=new FileInputStream(f);// fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 Java实现《通讯录》系统 2011年9月25日(印) psInsert.setString(1,pid);//设置此照片所属联系人 psInsert.setString(2,f.getName());//设置此照片名称 psInsert.setBytes(3,b);//设置照片数据 psInsert.executeUpdate();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){flag=1;}//找不到照片文件 catch(SQLException sqle){flag=2;}//文件已经存在 catch(Exception e){e.printStackTrace();} finally{DBOperate.closeCon();}//关闭数据库连接 return flag; } public static void main(String[] args) { System.out.println(DBOperate.delUser("aa")); } } Java实现《通讯录》系统 2011年9月25日(印) 2011年07月06日 谭 又 中(编)

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ]
6 人已下载

下载文档

相关文档