1、SuperVCD 项目功能介绍;服务器端查询模块:前台通过数据中心服务器查询出客户所需的信息。其中包括两大部分数据服务器:服务器中存放所有 CD 的信息,所有信息以文件(File)形式存放在 服务器中。集合: 所有信息以列表形式存放在服务器中。客户端查询模块:根据音乐的信息,客户可以查询 CD 的地区或分类。 分类将采用下拉列表的方式显每个类型。通过建立 socket 网络连接,将查询的信息返回给客户选中某条信息后,可以查看 CD 的详细信息。如播放长度、类型等项目完整代码:Frame 包中的代码:MainFrame.javapackage frame;import java.awt.*;im
2、port java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.io.*;import .*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import bean.Album;public class MainFrame extends JFrameprivate Socket
3、client;private ObjectInputStream o2;public void MainFrameSet() final JFrame jf=new JFrame(“欢迎你使用 SuperVCD 应用“);try client= new Socket (“localhost“,8888);o2 = new ObjectInputStream(client.getInputStream(); catch (UnknownHostException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace
4、();Container c=jf.getContentPane();JPanel p1=new JPanel();p1.setLayout(new FlowLayout(FlowLayout.LEFT) ;JLabel jl=new JLabel(“选择音乐目录:“);final JComboBox jcb=new JComboBox();jcb.addItem(“-“);try ArrayList zones=(ArrayList) o2.readObject();Iterator it = zones.iterator();while(it.hasNext()String key = i
5、t.next();jcb.addItem(key); catch (ClassNotFoundException e1) e1.printStackTrace();catch (IOException e1) e1.printStackTrace();/*Vector v=new Vector();v.add(“大陆“);v.add(“港台“);v.add(“欧美“);v.add(“新加坡“);for(String s:v)jcb.addItem(s);*/p1.add(jl); p1.add(jcb);JTabbedPane jtp = new JTabbedPane();jtp.addTa
6、b(“音乐“, p1);JLabel jl2 = new JLabel(“下载电影“);jtp.addTab(“电影“, jl2);c.add(jtp,BorderLayout.NORTH);Menu wenjian=new Menu(“文件“);Menu open =new Menu(“打开“);MenuItem m1=new MenuItem(“本地硬盘.“);MenuItem m2=new MenuItem(“网络.“);MenuItem m3=new MenuItem(“互联网.“);open.add(m1);open.add(m2);open.add(m3);MenuItem m4=
7、new MenuItem(“保存“);MenuItem m5=new MenuItem(“退出“);wenjian.add(open);wenjian.addSeparator();wenjian.add(m4);wenjian.addSeparator();wenjian.add(m5);Menu xuanxiang=new Menu(“选项“);MenuItem me1=new MenuItem(“外观一 “);MenuItem me2=new MenuItem(“外观二 “);MenuItem me3=new MenuItem(“外观三 “);xuanxiang.add(me1);xua
8、nxiang.add(me2);xuanxiang.add(me3);Menu bangzhu=new Menu(“帮助“);MenuItem me4=new MenuItem(“关于 “);bangzhu.add(me4);MenuBar mb=new MenuBar();mb.add(wenjian);mb.add(xuanxiang);mb.add(bangzhu);jf.setMenuBar(mb);/中部final JList jlist = new JList();c.add(jlist);JPanel jp2 = new JPanel();final JButton b1 = n
9、ew JButton(“详细“);b1.setEnabled(false);final JButton b2 = new JButton(“清空“);b2.setEnabled(false);final JButton b3 = new JButton(“退出“);jp2.add(b1);jp2.add(b2);jp2.add(b3);c.add(jp2,BorderLayout.SOUTH); jcb.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) if(e.getSta
10、teChange()=ItemEvent.SELECTED)if(jcb.getSelectedIndex()=0)jlist.setListData(new Vector();b1.setEnabled(false);b2.setEnabled(false);elseString zone = (String)jcb.getSelectedItem();jlist.setListData(new Vector();tryString diqu=(String)jcb.getSelectedItem();PrintWriter pw = new PrintWriter(client.getOu
11、tputStream();pw.println(diqu);pw.flush();Vector v=(Vector) o2.readObject();jlist.setListData(v);catch (ClassNotFoundException e1) e1.printStackTrace();catch (IOException e2) e2.printStackTrace();b2.setEnabled(true);b1.setEnabled(false);jlist.addListSelectionListener(new ListSelectionListener()Overri
12、depublic void valueChanged(ListSelectionEvent e) b1.setEnabled(true););b1.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) Album title =(Album)jlist.getSelectedValue();MusicDialog md=new MusicDialog();md.MusicDialog(jf,title););b2.addActionListener(new ActionL
13、istener() Overridepublic void actionPerformed(ActionEvent arg0) jcb.setSelectedIndex(0);););b3.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) jf.setVisible(false);jf.dispose();System.exit(1););jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setBounds(2
14、00, 200, 400, 400);jf.setVisible(true);MusicDialog.javapackage frame;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Vector;import javax.swing.*;import javax.swing.border.EmptyBorder;import javax.swing.border.TitledBorder;import bean.Album;im
15、port bean.Song;public class MusicDialog extends JDialogpublic static MainFrame MainFrame;public void MusicDialog(Frame fa,Album title) final JDialog jd = new JDialog(fa,“专辑的详细信息: “+title,true);/北部 图片Container con = this.getContentPane();con.setLayout(new BorderLayout();JPanel p1 =new JPanel();p1.set
16、Layout(new BoxLayout(p1, BoxLayout.X_AXIS);JPanel jpa = new JPanel();jpa.setBorder(new EmptyBorder(10, 10, 0, 10);jpa.setLayout(new GridBagLayout();GridBagConstraints c = new GridBagConstraints();c.gridx = 0;c.gridy = 1;c.gridwidth = 3;c.weightx = 10.0;c.weighty = 0.0;c.fill = GridBagConstraints.BOT
17、H;c.anchor = GridBagConstraints.WEST;c.insets = new Insets(10, 0, 2, 10);JLabel artistLabel = new JLabel(“歌手: “ +title.getSinger();artistLabel.setForeground(Color.black);jpa.add(artistLabel, c);c.gridy = GridBagConstraints.RELATIVE;c.insets = new Insets(2, 0, 10, 10);JLabel titleLabel = new JLabel(“
18、专辑名: “ +title.getName();titleLabel.setForeground(Color.black);jpa.add(titleLabel, c);JLabel categoryLabel = new JLabel(“地区: “+title.getZone();c.insets = new Insets(2, 0, 2, 0);categoryLabel.setForeground(Color.black);jpa.add(categoryLabel, c);p1.add(jpa);c.gridx = 3;c.gridy = 1;c.gridwidth = GridBag
19、Constraints.REMAINDER;c.gridheight = 5;c.fill = GridBagConstraints.NONE;c.weightx =10.0;c.weighty = 10;if(title.getPicture().trim().length()!=0)ImageIcon img = new ImageIcon(“images/“+title.getPicture();JLabel jl = new JLabel(img);p1.add(jl,c);elseImageIcon img1 = new ImageIcon(“images/暂无图片.jpg“);JL
20、abel jl1 = new JLabel(img1);p1.add(jl1,c);jd.add(p1,BorderLayout.NORTH);c.weightx=0.0;JPanel p3 =new JPanel();/中间 JListJList jlist = new JList();Vector vs=title.getSongs();jlist.setListData(vs);/* JList 当区域不能完整显示列表数据时,不会自动出现滚动条* 我们需要将 JList 组件放在一个滚动区中 JScrollPane* 注意:JScrollPane 有一个 view 可视区 组件放在可视区
21、才能显示* 2 种方式* (1)构造滚动区对象时,直接将被显示组件放入构造方法* (2)getViewport()获得可视区对象 JViewport,再使用可视区对象添加组件*/JScrollPane jsp = new JScrollPane(jlist);JScrollPane jsp = new JScrollPane();jsp.getViewport().add(jlist);/给滚动区设置边框jsp.setBorder(new TitledBorder(“歌曲列表: “);jd.add(jsp);/南部 按钮JPanel p2=new JPanel();JButton a1=new
22、 JButton(“确定“);p2.add(a1);jd.add(p2,BorderLayout.SOUTH);a1.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) jd.setVisible(false);jd.dispose(););jd.setBounds(200, 200,400, 500);jd.setVisible(true);StoneFrame.javapackage frame;public class StoneFrame /* param a
23、rgs*/public static void main(String args) MainFrame mf= new MainFrame();mf.MainFrameSet();FrameThead.javapackage frame;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.ObjectOutputStream;import .Socket;import java.util.ArrayList;import java.uti
24、l.Set;import java.util.Vector;import bean.Album;import bean.VCDDataBO;public class FrameThead extends Thread private Socket client;private VCDDataBO bo;private ObjectOutputStream o1;public FrameThead(Socket client,VCDDataBO bo,ObjectOutputStream o1)this.client=client;this.bo=bo;this.o1=o1;Overridepu
25、blic void run() try System.out.println(“客户端已连接上。 。 。“);Set se=bo.getData().keySet();ArrayList zones=new ArrayList(se);/获得key 值boolean f=true;while(f)BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream();String zone=br.readLine();Vector v=bo.getData().get(zone);o1.write
26、Object(v);o1.flush();o1.close();catch (IOException e) e.printStackTrace();public static void main(String args) Net 包中的代码Musicserver.javapackage net;import java.io.*;import .*;import java.util.ArrayList;import java.util.Iterator;import java.util.Set;import java.util.Vector;import frame.FrameThead;imp
27、ort bean.Album;import bean.VCDDataBO;public class Mucicserver public static void main(String args) try ServerSocket server=new ServerSocket(8888);System.out.println(“等待客户端的连接.“);boolean f1=true;while(f1)Socket client= server.accept();System.out.println(“客户端已连接上。 。 。“);VCDDataBO bo = new VCDDataBO();
28、bo.dataInit();System.out.println(“得到专辑的个数是:“+bo.getData().keySet().size()+“ 个“);Set se=bo.getData().keySet();ArrayList zones=new ArrayList(se);/获得 key值ObjectOutputStream o1=new ObjectOutputStream(client.getOutputStream();o1.writeObject(zones);FrameThead T=new FrameThead(client,bo,o1 );T.start();catc
29、h (IOException e) e.printStackTrace();Bean 中的代码Duration.javapackage bean;import java.io.Serializable;public class Duration implements Serializableprivate int h;private int m;private int s;public int getH() return h;public void setH(int h) this.h = h;public int getM() return m;public void setM(int m)
30、 this.m = m;public int getS() return s;public void setS(int s) this.s = s;public Duration(int h, int m, int s) super();this.h = h;this.m = m;this.s = s;public Duration(int totaltime) this.h = totaltime/3600;this.m = (totaltime-h*3600)/60;this.s = totaltime%60;public Duration()Overridepublic String t
31、oString() String result=“;result=result+padLeadingZero(h)+“:“;result=result+padLeadingZero(m)+“:“;result=result+padLeadingZero(s);return result;public String padLeadingZero(int number)String result=“;if(number songs;public Album() super();public Album(String singer, String name, String zone, String
32、picture) super();this.singer = singer;this.name = name;this.zone = zone;this.picture = picture;public String getSinger() return singer;public void setSinger(String singer) this.singer = singer;public String getName() return name;public void setName(String name) this.name = name;public String getZone
33、() return zone;public void setZone(String zone) this.zone = zone;public String getPicture() return picture;public void setPicture(String picture) this.picture = picture;public Vector getSongs() return songs;public void setSongs(Vector songs) this.songs = songs;Overridepublic String toString() return
34、 this.getSinger()+“ - “+this.getName();VCDataBO.javapackage bean;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.Vector;public class VCDDataBO private Map data = new
35、 HashMap();public Map getData() return data;public void setData(Map data) this.data = data;/* music.db 文件使用 io 进行读取封装工作*/public void dataInit()try /创建读文件的流BufferedReader br = new BufferedReader(new FileReader(“a/music.db“);String str = “;while(str = br.readLine()!=null)/张学友,给我亲爱的, 港台, 张学友.jpg, 10Str
36、ing strs = str.split(“,“);/封装专辑 String singer, String name, String zone, String pictureAlbum al = new Album(strs0,strs1,strs2.trim(),strs3.trim();/该专辑歌曲数量 下面应该使用流读取 count 行 每行都是歌曲int count = Integer.parseInt(strs4.trim();Vector v = new Vector();for(int i=0;iVector va = new Vector();va.add(al);data.p
37、ut(al.getZone(),va);else/包含 / al 专辑 地区在 map 存在 /取出存在的 VectorVector va = data.get(al.getZone();va.add(al);/将专辑放入 map 完成/读取下一行 - br.readLine(); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();项目所要使用的图片:项目要使用的 music.db 文件张学友,给我亲爱的, 港台, 张学友.jpg, 10不准点火,273给
38、我亲爱的,270忘情负义,243CRY,286旧信.旧梦,284LINDA,275法国餐厅,253热情面具,271仍是会喜欢你,264圈圈,260-顺子, 顺子, 港台,顺子.jpg, 13回家,299Inspiration,310Open up,325Just once,251再说了,278灵感,298若你离我而去,288永远等待,290写一首歌,310星星,299摇篮曲,244我得走了,210太阳,234-迪克牛仔, 我这个你不爱的人, 港台, 迪克牛仔.jpg, 10我这个你不爱的人,269麻辣男人,260第一号伤心,246出卖心碎,230无名小卒,210我敬你,254如果你是爱上我的沧
39、桑,230弃爱保歌,242爱无罪,269管他谁爱谁,245-林子祥, 十三子祥, 港台, 林子祥.jpg, 15生命之曲,288长路漫漫伴你闯,210男儿当自强,301谁能明白我,270真的汉子,210每一个晚上,230莫再悲,241改变常改变,235这一个夜,220结伴同航,264敢爱敢做,210追忆,284交出一切,246天地,277独自畅饮,215-胡彦斌, 文武双全, 大陆, 胡彦斌.jpg, 10老爸你别装酷,278梦猜,233你记得吗,264目不转睛,254第一次,277黑雨,299透明人,284想,245昨天是你生日,264进行式,255-那英, 征服, 大陆, 那英.jpg,
40、10梦醒了,299征服,310你是我的人,333放手,288为了爱,287最爱这一天,248不管有多苦,276什么态度,279爱要有你才完美,320相约一九九八,310-阿杜, 天黑, 新加坡, 阿杜.jpg, 10撕夜,278Andy,315Right Here Waiting,251离别,230你很好,211他一定很爱你,213天黑,260天天看到你,235无法阻挡,251一个人住,260-孙燕姿, 完美一天, 新加坡, 孙燕姿.jpg, 10完美一天,272眼泪成诗,224隐形人,276流浪地图,276第一天,253Honey Honey,264心愿,273另一张脸,223梦不落,226
41、明天晴天,232-Motley Crue, Greatest Hits, 欧美,暂无图片.jpg, 17Bitter Pill - (previously unreleased), 351Enslaved - (previously unreleased), 192Girls Girls Girls, 291Kickstart My Heart, 339Wild Side, 327Glitter - (remix), 285Dr. Feelgood, 309Same Ol Situation, 184Home Sweet Home, 189Whos Afraid of Java?, 249Do
42、nt Go Away Mad (Just Go Away), 300Without You, 197Smokin In The Boys Room, 323Primal Scream, 271Too Fast For Love, 326Looks That Kill, 317Shout At The Devil 97, 209-Shania Twain, Come On Over, 欧美,暂无图片.jpg, 16Man! I Feel Like A Woman!, 308Im Holding On To Love, 291Java Gets Me Every Time, 327Dont Be
43、Stupid, 285From This Moment On, 183Come On Over, 177When, 323Whatever You Do! Dont, 326If You Want To Touch Her - Ask!, 317Youre Still The One, 209Honey - Im Home, 285That Dont Impress Me Much, 305Black Eyes - Blue Tears, 299I Wont Leave You Lonley, 305Rock This Country!, 340Youve Got A Way, 369-Tch
44、aikovsky, Nutcracker, 欧美,暂无图片.jpg, 15Ov, 450March, 377Waltz of the Snowflakes, 399Chocolate (Spanish Dance), 488Coffee (Arabian Dance), 377Tea (Chinese Dance), 401Russian Dance, 244Dance of the Mirlitons, 299Mother Cigogne and the Clowns, 304Waltz of the Flowers, 310The Prince and the Sugar - Plum F
45、airy, 400Tarentella, 220Dance of the Sugar - Plum Fairy, 199Coda, 255Final Waltz and Apotheosis, 299-Mozart, Amadeus, 欧美,暂无图片.jpg, 12Sym No 25 In g, 301Ser No 10 in B-flat, 400Sym No 29 in A, 250Con For 2 Pno On E-flat, 266Sinfonia Concertante For Vn & Viola In E-Flat, 250Pno Con No 22 in E-Flat, 27
46、9Don Giovanni K.527, 401Requiem K.626: Dies Irae, 408Requiem K.626: Rex Tremendae, 242Requiem K.626: Confutatis, 233Requiem K.626: Lacrimosa, 299Pno Con No 20 In d, 301-Bruce Springsteen, Born To Run, 欧美,暂无图片.jpg, 8Thunder Road, 333Tenth Avenue Freeze-Out, 200Night, 220Backstreets, 240Born To Run, 260Shes The One, 270Meeting Across The River, 280Javaland, 290-