swing做的小程序2

这是一个使用Java Swing编写的音乐播放器应用,包括MyColor组件用于自定义列表和表格的单元格颜色,PlayMusic类负责播放音乐,Server类实现文件服务器功能,接收客户端请求并发送音乐文件,ServerWindow展示服务器控制界面。

MyColor:

package com.music;

import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class MyColor extends DefaultListCellRenderer implements TableCellRenderer{
 //设置歌曲列表的单元格的颜色
 public Component getListCellRendererComponent(JList list, Object value,
   int index, boolean isSelected, boolean cellHasFocus) {
  super.getListCellRendererComponent(list, value, index, isSelected,
    cellHasFocus);
  if (index % 2 == 0) {
   this.setBackground(Color.green);
  } else {
   this.setBackground(Color.yellow);
  }
  return this;
 }
 
 //设置"下载列表"单元格颜色
 public DefaultTableCellRenderer default_render=new DefaultTableCellRenderer();
 @Override
 public Component getTableCellRendererComponent(JTable table, Object value,
  boolean isSelected, boolean hasFocus, int row, int column) {
  default_render.setHorizontalAlignment(JLabel.CENTER);//将字体居中
  Component render=default_render.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  Color background;
  if(isSelected){
   background=Color.gray;
  }else{
   if(column%2==0){
    background=Color.white;
   }else{
    background=new Color(92,249,124);
   }
  }
  render.setBackground(background);
  return render;
 }
}

PlayMusic:

package com.music;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.media.Manager;
import javax.media.Player;

public class PlayMusic {
 Player player = null;
 String title = "音乐播放器";
 
 public PlayMusic(URL url) throws Exception{
  //创建一个准备Player,准备好播放  
  player = Manager.createRealizedPlayer(url); 
    }
 public PlayMusic (File musicFile) throws MalformedURLException, Exception
 {
  this(musicFile.toURL());
  startMusic();
 }
 
 private void startMusic()
 {
  player.prefetch();
  player.start();
 }
 private void stopMusic()
 {
  player.stop();
  player.close();
 }
}

 

Server:

package com.music.server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @param 服务器
 */
public class Server extends Thread {
 
 String[] recMesLists;
 String receiveMes;
 BufferedReader br=null;
 PrintWriter pw=null;
 File userInfoFiles=new File("src/server/userInfos");
 Socket client;
 public Server(){
 }
 public Server(Socket client){
  this.client = client;
 }
 
 public void startServer(){
  System.out.println("开始启动服务器");
  //创建服务器socket
  ServerSocket sst=null;
  try {
   sst=new ServerSocket(8821);
   while(true){
   //实现监听,等待客户端连接
   Socket client=sst.accept();
   //显示当前客户端的连接
   System.out.println("客户端:" + client.getInetAddress() + "获取了连接!");
   Server server=new Server(client);
   server.start();
   } 
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(sst!=null){
    try {
     sst.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
 
 @Override
 public void run() {
  if(!userInfoFiles.exists()){
   userInfoFiles.mkdir();//如果名为用户注册信息的文件不存在,则创建
  }
  try {
   br=new BufferedReader(new InputStreamReader(client.getInputStream()));
   receiveMes=br.readLine();
   recMesLists=receiveMes.split(",");//逗号作为分隔符将服务器从客户端获得的信息转换为一个字符串数组
   if(recMesLists[0].equals("regist注册")){
    File userInfoFile=new File(userInfoFiles,recMesLists[1]+".txt");
    if(userInfoFile.exists()){
     pw=new PrintWriter(client.getOutputStream());
     pw.println("regist-userExists用户已存在");
    }
    else
    {
     userInfoFile.createNewFile();
     StringBuffer sb = new StringBuffer();
     BufferedWriter bw=new BufferedWriter(new FileWriter(userInfoFile));
     for(int i = 1;i<recMesLists.length;i++)
     { 
      sb.append(recMesLists[i]+",");
     }
     String userInfoStr = sb.substring(0, sb.length()-1);
     bw.write(userInfoStr);
     bw.flush();
     bw.close();
     pw=new PrintWriter(client.getOutputStream());
     pw.println("regist-success注册成功");
    }
    pw.flush();
    pw.close();
   
   }else if(recMesLists[0].equals("login登陆")){
    File userInfoFile=new File(userInfoFiles,recMesLists[1]+".txt");
    if(!userInfoFile.exists()){
     pw=new PrintWriter(client.getOutputStream());
     pw.println("login-userNotExists用户名不存在");
    }else{
     BufferedReader brr=new BufferedReader(new FileReader(userInfoFile));
     String userInfoStrs=brr.readLine();
     String[] userInfoLists=userInfoStrs.split(",");
     if(!userInfoLists[1].equals(recMesLists[2]))
     {
      pw=new PrintWriter(client.getOutputStream());
      pw.println("login-pwdError密码错误");
     }
     else
     {
      pw=new PrintWriter(client.getOutputStream());
      pw.println("login-success登陆成功");
     }
    }
    pw.flush();
    pw.close();
   }else if(recMesLists[0].equals("musicList歌曲列表")){
    File musicfiles=new File("src/server/musics");
    if(!userInfoFiles.exists()){
     userInfoFiles.mkdir();
    }
    StringBuffer sb = new StringBuffer();
    String[] musicNames=musicfiles.list();
    for(int i=0;i<musicNames.length;i++){
     if(musicNames[i].endsWith("mp3") || musicNames[i].endsWith("wav"))
     {
      sb.append(musicNames[i]+",");
     }
    }
    String musicLists = sb.substring(0, sb.length()-1);
    pw=new PrintWriter(client.getOutputStream());
    pw.println(musicLists);
    pw.flush();
    pw.close();
   }else if(recMesLists[0].equals("downloadMusic开始下载歌曲")){
    File serverMusicFile=new File("src/server/musics",recMesLists[1]);
    //以字节流向客户端发送文件流
    //sendFileStreamByByte(serverMusicFile,client);
    //以字符流向客户端发送文件流
    sendFileStreamByByte(serverMusicFile,client);
   } 
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(client!=null){
    try {
     client.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }

 /**
  * 以字节流向客户端发送文件流
  */
 private void sendFileStreamByByte(File file,Socket client)
 {
  DataOutputStream dos;
  FileInputStream fis;
  //这个跟FileInputStream用法差不多
  //ImageInputStream imageis;
  try {
   //imageis=ImageIO.createImageInputStream(file);
   dos = new DataOutputStream(client.getOutputStream());
   fis = new FileInputStream(file);
   byte[] buffer = new byte[1024];
   int len=0;
   //len = imageis.read(buffer)
   while((len = fis.read(buffer))>0)
   {
    dos.write(buffer,0,len);
    dos.flush();
   }
   fis.close();
   dos.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 以字符流向客户端发送文件流
  */
 private void sendFileStreamByChar(File file,Socket client)
 {
  BufferedWriter bw;
  OutputStreamWriter osw;
  BufferedReader br;
  try {
   osw = new OutputStreamWriter(client.getOutputStream());
   bw=new BufferedWriter(osw);
   br = new BufferedReader(new FileReader(file));
   String line;
   while(null != (line = br.readLine()));
   {
    bw.write(line);
    bw.newLine();
   }
   bw.close();
   br.close();
   osw.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

ServerWindow:

package com.music.server;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ServerWindow extends JFrame implements ActionListener,Runnable{
 JButton beginServer = new JButton("启动");
 JButton endServer = new JButton("关闭");
 JLabel stateLabel = new JLabel("服务器尚未开启");
 int hhh = 0;
 
 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 int widthSize = (int)screenSize.getWidth();
 int heightSize = (int)screenSize.getHeight();
 public ServerWindow()
 {
  this.setTitle("服务器");
  //设置窗口大小
  this.setSize(widthSize/1024*400, heightSize/768*250);
  //设置布局
  this.setLayout(null);
  //设置窗口大小是否可以拖动
  this.setResizable(false);
  stateLabel.setBounds(widthSize/1024*150, heightSize/768*70, widthSize/1024*200, heightSize/768*25);
  beginServer.setBounds(widthSize/1024*100, heightSize/768*100, widthSize/1024*80, heightSize/768*25);
  endServer.setBounds(widthSize/1024*200, heightSize/768*100, widthSize/1024*80, heightSize/768*25);
  this.add(beginServer);
  this.add(endServer);
  this.add(stateLabel);
  //给两个按钮加上监听器
  beginServer.addActionListener(this);
  endServer.addActionListener(this);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //设置主色界面的位置位于中央
  this.setLocationRelativeTo(null);
  this.setVisible(true);
 }
 @Override
 public void actionPerformed(ActionEvent e) {
  if(e.getSource() == beginServer)
  {
   Thread swThread = new Thread(this);
   swThread.start();
   stateLabel.setText("服务器正在运行...");
  }
  if(e.getSource() == endServer)
  {
   System.exit(0);
  }
 }
 @Override
 public void run() {
  new Server().startServer(); 
 }
 
 public static void main(String[] args)
 {
  new ServerWindow();
 }
}

FileDemo:

package com.music.client;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileDemo {
 public static void main(String[] args)
 {
  new FileDemo().updateFileName();
 }
 
 /**
  * 重命名文件
  */
 public void updateFileName()
 {
  File fromFiles = new File("src/server/musics");
  File[] fromFileArrays = fromFiles.listFiles();
  File toFiles = new File("src/server/photos");
  File[] toFileArrays = toFiles.listFiles();
  List<File> fromFileList = new ArrayList<File>();
  int fromLen = fromFileArrays.length;
  int toLen = toFileArrays.length;
  for(int i = 0;i<fromLen;i++)
  {
   if(fromFileArrays[i].isFile())
   {
    fromFileList.add(fromFileArrays[i]);
   }
  }
  fromLen = fromFileList.size();
  if(fromLen<toLen)
  {
   toLen = fromLen;
  }
  for(int i = 0; i<toLen; i++)
  {
   int toFileNameSize = toFileArrays[i].getName().length();
   String fileNameType = toFileArrays[i].getName().substring(toFileNameSize-3,toFileNameSize);
   int fromFileNameSize = fromFileList.get(i).getName().length();
   String fileName = fromFileList.get(i).getName().substring(0,fromFileNameSize-3)+fileNameType;
   toFileArrays[i].renameTo(new File(toFiles,fileName));
  }
 }

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值