java通讯录

这是我第一次做的这个java通讯录,花了近三个小时,虽然这里面的东西不难理解,但是,需要记忆的东西比较多,在将这些代码复制到IDE中的时候要记得导包,一个是连接数据库的,还有一个是整个页面风格的,作为我的一个小小的学习笔记~

一共是由三部分组成:

1.LianXiRen.java

2.ChaXun.java

3.Conn

***********************************************************************************************************************************1----------------------------------------------------------------------------------------------------

package com.hlf.tongxunlu;

import java.awt.Component;
import java.awt.Container;

import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.skin.CremeSkin;
import org.jvnet.substance.skin.GreenMagicSkin;
import org.jvnet.substance.skin.SaharaSkin;
import org.jvnet.substance.skin.SubstanceAutumnLookAndFeel;
import org.jvnet.substance.skin.SubstanceSaharaLookAndFeel;
import org.jvnet.substance.theme.SubstanceAquaTheme;

public class LianXiRen extends JFrame {
 
 JTree jtr;//一个树;
 DefaultMutableTreeNode node;
 DefaultMutableTreeNode family;
 DefaultMutableTreeNode father;
 DefaultMutableTreeNode mother;
 DefaultMutableTreeNode friend;
 DefaultMutableTreeNode xiaohe;
 DefaultMutableTreeNode stranger;
 
 //还需要一个分割面板,将左右的名称和树形图分割开来、
 JSplitPane jsplitpane;
 //还要一个用来在右边显示的滚动面板
 JScrollPane jscrollpane;
 
 public LianXiRen(){
  
  Container con=this.getContentPane();//得到一个容器
  
  //各个节点
  node=new DefaultMutableTreeNode("我的通讯录");
  family=new DefaultMutableTreeNode("家人");
  father=new DefaultMutableTreeNode("爸爸");
  mother=new DefaultMutableTreeNode("妈妈");
  friend=new DefaultMutableTreeNode("同学");
  xiaohe=new DefaultMutableTreeNode("小何");
  stranger=new DefaultMutableTreeNode("陌生人");
  
  //添加节点
  family.add(father);
  family.add(mother);
  friend.add(xiaohe);
  node.add(family);
  node.add(friend);
  node.add(stranger);
  
  //将这些模型加载树上
  jtr=new JTree(node);
  
  //水平分隔面板
  jsplitpane=new JSplitPane(jsplitpane.HORIZONTAL_SPLIT);
  //1.将树加在左边
  jsplitpane.setLeftComponent(jtr);
  //2.右边是用来显示的 3.在右边添加一张图片
  ImageIcon img=new ImageIcon(getClass().getResource("snow.jpg"));
  JLabel j=new JLabel(img);
  jscrollpane=new JScrollPane(j);
  jsplitpane.setRightComponent(jscrollpane);
//  jsplitpane.setLastDividerLocation(10000);
  
  //添加树的监听器可以得到每次点击的是那一个节点,然后可以去数据库中查询
  jtr.addTreeSelectionListener(new TreeSelectionListener() {
   
   @Override
   public void valueChanged(TreeSelectionEvent e) {
    // TODO Auto-generated method stub
    
    String name=e.getPath().getLastPathComponent().toString();
    System.out.println(name);
    if(name.equals("同学")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }
    if(name.equals("家人")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }if(name.equals("妈妈")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }if(name.equals("爸爸")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }if(name.equals("小何")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }
    if(name.equals("陌生人")){
     jsplitpane.setRightComponent(new ChaXun(name));
     
    }
   }
  });
  
  con.add(jsplitpane);
  
  
  
  this.setBounds(200, 100, 800, 480);
  this.setVisible(true);
  this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
  
  
 }
 
 public static void main(String[] args) {
  
  try {
   UIManager.setLookAndFeel(new SubstanceAutumnLookAndFeel());
   // UIManager.put("swing.boldMetal", false);
   if (System.getProperty("substancelaf.useDecorations") == null) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JDialog.setDefaultLookAndFeelDecorated(true);
   }
   System.setProperty("sun.awt.noerasebackground", "true");
   // 设置当前的主题风格,同样我 们还可以设置当前的按钮形状,水印风格等等
   SubstanceLookAndFeel.setCurrentTheme(new SubstanceAquaTheme());
   SubstanceSaharaLookAndFeel.setSkin(new GreenMagicSkin());
  } catch (Exception e) {
   System.err.println("Oops!  Something went wrong!");
  }
  LianXiRen lianxiren=new LianXiRen();
  
 }

}


 

2.-------------------------------------------------------------------------------------------------------------------------------------------------------

package com.hlf.tongxunlu;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class ChaXun extends JPanel{
 //新建一个面板,用来放置表格
 JPanel jpanel=new JPanel();
 //表格
 JTable jtable=new JTable();
 //下面是表格模型
 DefaultTableModel model=new DefaultTableModel();
 

 JScrollPane jsc = new JScrollPane(jtable);
 static String name;
 
 
  ChaXun(String name) {
  //添加列名
   this.name=name;
  model.addColumn("分组");
  model.addColumn("姓名");
  model.addColumn("电话");
  jtable.setModel(model);
  
  getInfomation();
  jpanel.setLayout(null);
  jpanel.setBounds(0, 0, 200, 200);
  this.add(jsc);
  this.setLayout(null);
  jsc.setBounds(0, 0, 650,450);
  
 }
   void getInfomation() {
  
   Connection conn=Conn.getCon();
   PreparedStatement pstmt=null;
   PreparedStatement pstmt2=null;
   String sql="select fz,name,phonenum from txl where fz=?";
   String sql2="select fz,name,phonenum from txl where name=?";
   try {
    pstmt=conn.prepareStatement(sql);
    pstmt2=conn.prepareStatement(sql2);
    pstmt.setString(1, name);
    pstmt2.setString(1, name);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   System.out.println("sql语句异常");
  }
  ResultSet rs=null;
  ResultSet rs2=null;
  try {
   rs = pstmt.executeQuery();
   while(rs.next()){
    String fenzu=rs.getString(1);
    String name=rs.getString(2);
    String phone=rs.getString(3);
    Vector v=new Vector();
    v.add(fenzu);
    v.add(name);
    v.add(phone);
    model.addRow(v);
   
   }
   
   rs2 = pstmt2.executeQuery();
   while(rs2.next()){
    String fenzu=rs2.getString(1);
    String name=rs2.getString(2);
    String phone=rs2.getString(3);
    Vector v=new Vector();
    v.add(fenzu);
    v.add(name);
    v.add(phone);
    model.addRow(v);
   
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block

   System.out.println("sql语句执行异常");
  }
  
  
  
  }
 public JPanel getJPanel() {

  return jpanel;
 }
 public static void main(String[] args) {
  
  //新建的窗口
  JFrame jframe=new JFrame();
  ChaXun chaxun=new ChaXun(name);
  //把最后的结果放在jframe中
  jframe.getContentPane().add(chaxun.getJPanel());
  
  jframe.setBounds(100, 100, 600, 500);
  jframe.setVisible(true);
  jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
  
 
 }

}

3.----------------------------------------------------------------------------------------------------------------

package com.hlf.tongxunlu;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conn {
 private static String url="jdbc:sqlserver://localhost:1433;DatabaseName=lxr";
 private static String user="sa";
 private static String password="sa";
 static Connection getCon(){
  Connection connection = null;
  try {
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println("驱动加载失败");
  }
  try {
   connection=DriverManager.getConnection(url, user, password);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   System.out.println("数据库连接失败");
  }
  
  return connection;
 }
 
// public static void main(String[] args) {
//  new Conn().getCon();
// }
 
 

}

 

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现了以下要求说明的功能: 1.要求使用GUI,采用 Swing 技术数据存储采用文件系统(可以是文本 文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、 邮编、电话、传真 ( 3)网络信息:个人主页、即时通信工具及号码、备用邮箱 ( 4)家庭资料:国家、省份、城市、地址、邮编、电话 3 .通讯录数据的录入功能:输入并存储新的通讯录数据,输入时如果有同 名或同电话号码时,应该给出提示。 4 .通讯录数据的查询功能: ( 1)默认列出所有条目。 ( 2)模糊查询,可以按:姓名、电话号码、手机、姓名的汉语拼音的声母 或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。 如:输入“张”,列出所有名字中有“张”的条目;输入“ 2645”列出电话中有 该 4个数字的所有条目;输入“xl ”,列出声母为该 2 个字母的所有条目 ( 3)指定分组后,列出某分组的所有条目 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一 个汉语拼音的字母分类。 5 .删除和修改功能:查询到一个条目后,可以删除该条目或修改条目内容。 6 .通信录内容的导入和导出功能。要求能够以CSV 格式和 vCard 格式导入 和导出通讯录的全部内容。并能够与主流手机或其他通讯录软件交换数据。 7 .通讯录显示设置,可以设置在显示查询结果时,一个条目可以显示或不 显示哪些内容。 注意:本系统实现了读取和保存csv文件,同时csv文件中只保存了图片的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值