Swing做的小程序,备份一下

ClientLogin:

package com.music.client;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/*
 * 用户登录界面
 */
public class ClientLogin extends JFrame implements ActionListener,
  MouseListener,Runnable {
 // 图片编号
 int photoNo;
 // 定义一个面板存放各个按钮
 JPanel clientPanel = new JPanel();
 // 定义两个按钮分别为登录、注册
 JButton loginBtn = new JButton("登录");
 JButton reSetBtn = new JButton("重置");
 JButton registBtn = new JButton("去注册");
 // 定义三个标签分别为用户名和密码、验证码
 JLabel nameLabel = new JLabel("用户名:");
 JLabel pwdLabel = new JLabel("密    码:");
 JLabel checkLabel = new JLabel();
 // 定义两个文本框
 JTextField nameText = new JTextField(30);
 JPasswordField pwdText = new JPasswordField(30);
 JTextField checkText = new JTextField(10);
 // 定义一个背景图片
 ImageIcon imageIcon;
 // 定义一个标签,将背景图片加入到标签
 JLabel imageLabel = new JLabel();
 // 验证码
 String checkCode;
 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 int widthSize = (int) screenSize.getWidth();
 int heightSize = (int) screenSize.getHeight();

 public ClientLogin() {
  // 设置窗口标题
  this.setTitle("贾秋峰个人音乐共享平台");
  // 设置窗口大小
  this.setSize(widthSize / 1024 * 750, heightSize / 768 * 400);
  // 设置布局
  this.setLayout(new BorderLayout());
  // 设置窗口大小是否可以拖动
  this.setResizable(false);
  loadClientPanel();
  photoNo = 0;
  loadBackImage();
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // 设置主色界面的位置位于中央
  this.setLocationRelativeTo(null);
  // 设置窗口可见
  this.setVisible(true);
  new Thread(this).start();
 
 }

 public void landContents() {
  // 点击登陆,与服务器端建立连接
  String name = nameText.getText();
  String pwd = pwdText.getText();
  try {
   Socket sk = new Socket("127.0.0.1", 8821);
   PrintWriter pw = new PrintWriter(sk.getOutputStream());
   pw.println("login登陆" + "," + name + "," + pwd);
   pw.flush();
   BufferedReader br = new BufferedReader(new InputStreamReader(
     sk.getInputStream()));
   String str = br.readLine();
   if ("login-userNotExists用户名不存在".equals(str)) {
    JOptionPane.showMessageDialog(null, "用户名不存在,请重新填写", "提示信息", 2);
    nameText.setText("");
    pwdText.setText("");
    nameText.requestFocus();
   } else if ("login-pwdError密码错误".equals(str)) {
    JOptionPane.showMessageDialog(null, "密码错误,请重新输入", "提示信息", 2);
    pwdText.setText("");
    pwdText.requestFocus();
   } else if ("login-success登陆成功".equals(str)) {
    new MainWindow();
    this.setVisible(false);
    this.dispose();
   }
  } catch (Exception e) {
   System.out.println("链接超时");
  }

 }
 
 /**
  * 显示背景图片核心方法
  */
 private void showBackImage()
 {
  File imageFile = new File("src/local/myPhotos/");
  if (!imageFile.exists()) {
   imageFile.mkdir();
  }
  String[] fileNames = imageFile.list();
  if (photoNo >= fileNames.length) {
   photoNo = 0;
  }
  imageIcon = new ImageIcon("src/local/myPhotos/" + fileNames[photoNo]);
  Image image = imageIcon.getImage();
  image = image.getScaledInstance(widthSize / 1024 * 750,
    heightSize / 768 * 370, Image.SCALE_DEFAULT);
  //imageIcon = new ImageIcon(image);
  imageIcon.setImage(image);
  imageLabel.setIcon(imageIcon);
 }

 /**
  * 加载背景图片
  */
 private void loadBackImage(){
  showBackImage();
  imageLabel.setBounds(0, 0, widthSize / 1024 * 750,
    heightSize / 768 * 350);
  this.add(imageLabel);
 }
 
 /**
  * 刷新背景图片
  */
 public void fulshOneBackImage()
 {
  photoNo++;
  showBackImage();
 }
 
 /**
  * 一秒换一张背景图片
  */
 public void run() {
  while (true) {
   try {
    // 当前线程休息1秒
    Thread.sleep(1500);
    fulshOneBackImage();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }

 /**
  * 加载登陆信息界面
  */
 private void loadClientPanel() {
  loadCheckCode();
  clientPanel.setLayout(null);
  // 将标签加入容器中
  nameLabel.setBounds(0, 0, widthSize / 1024 * 60, heightSize / 768 * 25);
  nameText.setBounds(widthSize / 1024 * 60, 0, widthSize / 1024 * 130,
    heightSize / 768 * 25);
  pwdLabel.setBounds(widthSize / 1024 * 190, 0, widthSize / 1024 * 60,
    heightSize / 768 * 25);
  pwdText.setBounds(widthSize / 1024 * 250, 0, widthSize / 1024 * 130,
    heightSize / 768 * 25);
  checkLabel.setBounds(widthSize / 1024 * 380, 0, widthSize / 1024 * 60,
    heightSize / 768 * 25);
  checkText.setBounds(widthSize / 1024 * 440, 0, widthSize / 1024 * 75,
    heightSize / 768 * 25);
  loginBtn.setBounds(widthSize / 1024 * 516, 0, widthSize / 1024 * 75,
    heightSize / 768 * 25);
  reSetBtn.setBounds(widthSize / 1024 * 592, 0, widthSize / 1024 * 75,
    heightSize / 768 * 25);
  registBtn.setBounds(widthSize / 1024 * 668, 0, widthSize / 1024 * 75,
    heightSize / 768 * 25);
  clientPanel.add(nameLabel);
  clientPanel.add(pwdLabel);
  clientPanel.add(checkLabel);
  // 将文本框加入容器中
  clientPanel.add(nameText);
  clientPanel.add(pwdText);
  clientPanel.add(checkText);
  // 将按钮加入容器中
  clientPanel.add(loginBtn);
  clientPanel.add(reSetBtn);
  clientPanel.add(registBtn);
  // 设置容器的背景
  clientPanel.setBackground(Color.ORANGE);
  clientPanel.setBounds(0, heightSize / 768 * 350,
    widthSize / 1024 * 750, heightSize / 768 * 25);
  this.add(clientPanel);
  // 给两个按钮加上监听器
  loginBtn.addActionListener(this);
  registBtn.addActionListener(this);
  reSetBtn.addActionListener(this);
  checkLabel.addMouseListener(this);
 }
 
 /**
  * 加载验证码到标签里
  */
 private void loadCheckCode()
 {
  checkCode = checkCode(4);
  checkLabel.setText(checkCode);
 }

 /**
  * 获取n位验证码
  */
 private String checkCode(int n) {
  StringBuffer sb = new StringBuffer();
  String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  for (int i = 0; i < n; i++) {
   Random random = new Random();
   int randomNo = random.nextInt(base.length());
   char randomNum = base.charAt(randomNo);
   sb.append(randomNum);
  }
  return sb.toString();
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  // 判断用户点击哪个按钮
  if (e.getSource() == loginBtn) {
   // 如果按登录按钮
   if (nameText.getText().equals("") || pwdText.getText().equals("")) {
    JOptionPane.showMessageDialog(null, "请填写用户名和密码!", "提示信息", 2);
    nameText.requestFocus();
   } else if (!(checkText.getText().toLowerCase().equals(checkCode
     .toLowerCase()))) {
    JOptionPane.showMessageDialog(null, "验证码错误!", "提示信息", 2);
    checkText.setText("");
    loadCheckCode();
    checkText.requestFocus();
   } else {
    this.landContents();
   }
  } else if (e.getSource() == registBtn) {
   // 如果用户点击注册按钮,进入注册界面
   new RegistWindow();
   this.setVisible(false);
   //释放资源
   this.dispose();

  } else if (e.getSource() == reSetBtn) {
   loadCheckCode();
   nameText.setText("");
   pwdText.setText("");
   checkText.setText("");
  }
 }

 @Override
 public void mouseClicked(MouseEvent e) {
  if (e.getSource() == checkLabel) {
   loadCheckCode();
  }
 }

 @Override
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub

 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub

 }

 @Override
 public void mouseEntered(MouseEvent e) {
  // TODO Auto-generated method stub

 }

 @Override
 public void mouseExited(MouseEvent e) {
  // TODO Auto-generated method stub

 }
 public static void main(String[] args) {
  ClientLogin clientLogin=new ClientLogin();
 }
}

 

RegistWindow:

package com.music.client;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Serializable;
import java.net.Socket;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/*
 * 用户注册界面
 */
public class RegistWindow extends JFrame implements ActionListener,Serializable {

 //定义三个按钮 分别为   重置、 注册 、返回
 JButton resetBtn=new JButton("重置");
    JButton registBtn=new JButton("注册");
    JButton backBtn=new JButton("返回");
    //定义四个标签分别为用户名、输入密码、确认密码、邮箱
    JLabel nameJL=new JLabel("用户名:");
    JLabel pwdJL=new JLabel("输入密码:");
    JLabel surepwdJL=new JLabel("确认密码:");
    JLabel mailJL=new JLabel("邮箱:");
   //定义四个文本框
    JTextField nameText=new JTextField(30);
    JPasswordField pwdText=new JPasswordField(30);
    JPasswordField surepwdText=new JPasswordField(30);
    JTextField mailText=new JTextField(30);
 //定义一个容器存放各种组件
    JPanel registPanel=new JPanel();
    //定义一个背景图片
    ImageIcon imageIcon;
    //定义一个标签,把背景图片加入标签中
    JLabel imageLabel;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 int widthSize = (int)screenSize.getWidth();
 int heightSize = (int)screenSize.getHeight();
    public RegistWindow(){
  // 设置窗口标题
  this.setTitle("贾秋峰个人音乐共享平台");
  // 设置窗口大小
  this.setSize(widthSize / 1024 * 750, heightSize / 768 * 400);
  // 设置布局
  this.setLayout(new BorderLayout());
  // 设置窗口大小是否可以拖动
  this.setResizable(false);
  loadRegistPanel();
  loadBackImage();
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // 设置注册界面的位置位于中央
  this.setLocationRelativeTo(null);
  // 窗体设置可见
  this.setVisible(true);
 
    
    }
   
    /**
  * 加载背景图片
  */
 private void loadBackImage()
 {
  imageIcon=new ImageIcon("src/local/myPhotos/002.jpg");
  Image image = imageIcon.getImage();
  image = image.getScaledInstance(widthSize/1024*750, heightSize/768*400, Image.SCALE_DEFAULT);
  imageIcon = new ImageIcon(image);
  imageLabel=new JLabel(imageIcon);
  //getSize得到父组建的大小
  imageLabel.setSize(getSize());
  this.add(imageLabel);
 }
 
    /**
     * 加载注册信息界面
     */
 private void loadRegistPanel() {
  registPanel.setLayout(null);
  // 设置标签的位置
  nameJL.setBounds(widthSize / 1024 * 35, heightSize / 768 * 25, widthSize / 1024 * 60, heightSize / 768 * 25);
  pwdJL.setBounds(widthSize / 1024 * 35, heightSize / 768 * 55, widthSize / 1024 * 60, heightSize / 768 * 25);
  surepwdJL.setBounds(widthSize / 1024 * 35, heightSize / 768 * 85, widthSize / 1024 * 60, heightSize / 768 * 25);
  mailJL.setBounds(widthSize / 1024 * 35, heightSize / 768 * 115, widthSize / 1024 * 60, heightSize / 768 * 25);
  // 设置文本框的位置
  nameText.setBounds(widthSize / 1024 * 95, heightSize / 768 * 25, widthSize / 1024 * 200, heightSize / 768 * 25);
  pwdText.setBounds(widthSize / 1024 * 95, heightSize / 768 * 55, widthSize / 1024 * 200, heightSize / 768 * 25);
  surepwdText.setBounds(widthSize / 1024 * 95, heightSize / 768 * 85, widthSize / 1024 * 200, heightSize / 768 * 25);
  mailText.setBounds(widthSize / 1024 * 95, heightSize / 768 * 115, widthSize / 1024 * 200, heightSize / 768 * 25);
  // 设置按钮的位置
  registBtn.setBounds(widthSize / 1024 * 50, heightSize / 768 * 150, widthSize / 1024 * 70, heightSize / 768 * 30);
  resetBtn.setBounds(widthSize / 1024 * 130, heightSize / 768 * 150, widthSize / 1024 * 70, heightSize / 768 * 30);
  backBtn.setBounds(widthSize / 1024 * 210, heightSize / 768 * 150, widthSize / 1024 * 70, heightSize / 768 * 30);
  // 将标签加入容器中
  registPanel.add(nameJL);
  registPanel.add(pwdJL);
  registPanel.add(surepwdJL);
  registPanel.add(mailJL);
  // 将文本框加入容器中
  registPanel.add(nameText);
  registPanel.add(pwdText);
  registPanel.add(surepwdText);
  registPanel.add(mailText);
  // 将按钮加入容器中
  registPanel.add(resetBtn);
  registPanel.add(registBtn);
  registPanel.add(backBtn);
  // 设置容器的背景
  registPanel.setBackground(Color.green);
  // 设置容器的位置
  registPanel.setBounds(widthSize / 1024 * 350, heightSize / 768 * 25, widthSize / 1024 * 330,
    heightSize / 768 * 210);
  // 将容器面板和标签图片加入界面中
  this.add(registPanel);
  // 给三个按钮加上监听器
  resetBtn.addActionListener(this);
  registBtn.addActionListener(this);
  backBtn.addActionListener(this);
 }
    public void actionPerformed(ActionEvent e){
     //判断是哪个按键发出的
     if(e.getSource()==resetBtn){
      //如果点击重置按键,将文本框中的内容清空
      nameText.setText("");
      pwdText.setText("");
      surepwdText.setText("");
      mailText.setText("");
     }else if(e.getSource()==registBtn){
      //如果点击注册按键,进行下面操作
      isRegistSuccess();
     }else if(e.getSource()==backBtn){
      new ClientLogin();
      this.setVisible(false);
      this.dispose();
     }
    }
   
    /**
     * 点击注册按键,进行下面操作
     */
    private void isRegistSuccess()
    {
     if(nameText.getText().equals("")||pwdText.getText().equals("")||surepwdText.getText().equals("")||mailText.getText().equals("")){
   //判断是否没有填写完整
   JOptionPane.showMessageDialog(null, "请将空白处填写完整", "提示信息", 2);
  }else if(!pwdText.getText().equals(surepwdText.getText())){
   //判断两次密码是否一致
   JOptionPane.showMessageDialog(null, "对不起,密码填写的不一致,请重新填写", "提示信息", JOptionPane.ERROR_MESSAGE);
   pwdText.setText("");
      surepwdText.setText("");
  }else if(!mailText.getText().matches("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*")){
   //判断邮件格式是否正确
   JOptionPane.showMessageDialog(null, "对不起,您输入的邮件格式非法,请重新编写", "信息提示", JOptionPane.ERROR_MESSAGE);
   mailText.setText("");
  }else{
   //将注册信息发送至服务器端
   registconnent();
  }
    }
   
  //将注册信息发送至服务器
    public void registconnent() {
     String nameStr=nameText.getText();
     String pwdStr=pwdText.getText();
     String emailStr=mailText.getText();
     Socket sk=null;
     String[] str1=null;
     BufferedReader br;
     try {
   sk=new Socket("127.0.0.1",8821);
   PrintWriter pw=new PrintWriter(sk.getOutputStream());
   pw.println("regist注册"+","+nameStr+","+pwdStr+","+emailStr);
   pw.flush();
   br=new BufferedReader(new InputStreamReader(sk.getInputStream()));
   String str2=br.readLine();
   if(str2.equals("regist-userExists用户已存在")){
    JOptionPane.showMessageDialog(null, "该用户已经存在,换一个试试", "信息提示", 2);
    nameText.setText("");
   }
   else if(str2.equals("regist-success注册成功")){
    JOptionPane.showMessageDialog(null, "恭喜您注册成功,点击返回进行登录!", "信息提示", 1);
   }
  } catch (Exception e) {
   System.out.println("链接超时");
  
  }finally{
   if(sk!=null){
    try {
     sk.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
    }
}

MainWindow:

package com.music.client;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;

public class MainWindow extends JFrame implements MouseListener,Runnable{
 // 定义一个JTabbedPane,存放4个面板窗口
 JTabbedPane jTablAllPane = new JTabbedPane();
 
 // 创建4个面板
 JPanel mainWindowPanel = new JPanel();
 JScrollPane songListJSPanel = new JScrollPane();
 JPanel downloadListPanel = new JPanel();
 JPanel mySongPanel = new JPanel();

 /*
  * 主界面所需要的部件
  */
 //音乐列表
 JPanel musicListPanel = new JPanel();
 //背景图片
 ImageIcon mainImageIcon;
 //存放背景图片的标签
 JLabel mainImageLabel =new JLabel();
 //定义一个存放音乐列表的面板
 JScrollPane mainMusicListPanel = new JScrollPane();
 //定义一个标签存放音乐名
 JList mainMusicList = new JList();
 DefaultListModel defaultMusicModel;

 /*
  * 歌曲列表所需要的部件
  */
 JList songMusicList = new JList();
 JFileChooser songFileChooser= new JFileChooser();
 ListModel songListModel;
 
 /*
  * 下载列表所需要的部件
  */
 //进度条
 JProgressBar downloadListBar;
 JScrollPane downloadMusicListJSPanel = new JScrollPane();
 JList downloadListList = new JList();
 DefaultTableModel downloadListTableModel;
 JTable downloadListTable = new JTable();

 /*
  * 我的音乐所需要部件
  */
 //进度条
 JProgressBar myMusicBar;
 JScrollPane myMusicListPanel = new JScrollPane();
 JList myMusicList = new JList();
 DefaultListModel defaultMyMusicModel = new DefaultListModel();
 JFileChooser myMusicChooser = new JFileChooser();
 File myMusicFile = new File("src/local/myMusics");
 int musicNum = 1;

 //屏幕尺寸
 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 int widthSize = (int) screenSize.getWidth();
 int heightSize = (int) screenSize.getHeight();
 
 Socket sk;
 
    public MainWindow(){
     //加载主界面内容
     loadMainWindowPanel();
     //加载歌曲列表界面内容
     loadMusicListPanel();
     //加载下载列表界面内容
     loadDownLoadMusicPanel();
     //加载我的音乐界面内容
     loadMyMusicPanel();
     //将所有面板加入窗体中
     loadTablAllPane(); 
     setWindowStyle();
     }
   
    /**
  * 加载主界面
  */
 private void loadMainWindowPanel() {
  mainWindowPanel.setLayout(null);
  //加载背景图片
  loadBackImage("001.jpg");
  loadMainMusicListPanel();
 }
 
 /**
  * 显示主界面背景图片的核心方法
  */
 private void showBackImage(String fileName)
 {
  mainImageIcon=new ImageIcon("src/local/myPhotos/"+fileName);
  Image image = mainImageIcon.getImage();
  image = image.getScaledInstance(widthSize/1024*600, heightSize/768*340, Image.SCALE_DEFAULT);
  //mainImageIcon = new ImageIcon(image);
  mainImageIcon.setImage(image);
  mainImageLabel.setIcon(mainImageIcon);
 }
 /**
  * 加载主界面背景图片
  */
 private void loadBackImage(String fileName)
 {
  showBackImage(fileName);
  mainImageLabel.setBounds(0, 0, widthSize/1024*600, heightSize/768*340);
  mainWindowPanel.add(mainImageLabel);
 }
 /**
  * 加载主界面的音乐列表面板
  */
 private void loadMainMusicListPanel()
 {
   mainMusicListPanel.setBounds(widthSize/1024*600, 0, widthSize/1024*150, heightSize/768*340);
   defaultMusicModel=new DefaultListModel();
   mainMusicList.setModel(defaultMusicModel);
   String[] musicArrays = getMusicArrays();
   if(musicArrays == null)
   {
    defaultMusicModel.addElement("链接超时...");
   }
   else
   {  
    for(int i=0;i<musicArrays.length;i++){
     defaultMusicModel.addElement(musicArrays[i]);
    }
    mainMusicList.addMouseListener(this);
   }
   mainMusicList.setFont(new Font(null,0,10));
   mainMusicList.setFixedCellHeight(20);
   //设置歌曲列表的单元格的颜色
   mainMusicList.setCellRenderer(new MyColor());
   mainMusicList.setBounds(widthSize/1024*600, 0, widthSize/1024*150, heightSize/768*340);
   mainMusicListPanel.setViewportView(mainMusicList);
   mainWindowPanel.add(mainMusicListPanel);
  
 }
 
 /**
  * 加载音乐列表界面
  * @param args
  */
 private void loadMusicListPanel() {
  String[] songMusicListArrays = getMusicArrays();
  if(songMusicListArrays == null)
  {
   songMusicListArrays = new String[]{"链接超时..."};
  }
  else
  {
   songMusicList.addMouseListener(this);
//   songMusicList.addMouseListener(new MouseAdapter() {
//    public void mouseClicked(MouseEvent e) {
//     if (e.getClickCount() == 2) {
//      startDownloadMusic(songMusicList);
//     }
//    }
//   });
  }
  songListModel = new DefaultComboBoxModel(songMusicListArrays);
  songMusicList.setModel(songListModel);
  songMusicList.setFixedCellHeight(20);
  songMusicList.setFont(new Font(null, 1, 12));
  songMusicList.setCellRenderer(new MyColor());
  songListJSPanel.setViewportView(songMusicList);
  songMusicList.setSelectionForeground(new Color(100, 100, 100));
 }
 
 /**
  * 加载下载列表界面内容
  * @param args
  */
 private void loadDownLoadMusicPanel() {
  downloadListPanel.setLayout(null);
  downloadListPanel.setBounds(0,0,widthSize/1024*750,heightSize/768*400);
  downloadMusicListJSPanel.setLayout(null);
  Object[] objHead = new Object[]{"\t文件名","\t大小"};
  downloadListTableModel = new DefaultTableModel(objHead,0);
  downloadListTable.setModel(downloadListTableModel);
  //downloadMusicListJSPanel.add(downloadListTable);
  downloadListTable.setFont(new Font(null, 0, 12)); // 设置字体
  downloadListTable.setRowHeight(20); // 设置行高
  downloadListTable.setEnabled(false); // 设置用户不可进入
  downloadListTable.getTableHeader().setReorderingAllowed(false);
  // 如果在 TableColumn 中未设置渲染器,则设置要使用的默认单元格渲染器
  downloadListTable.setDefaultRenderer(Object.class, new MyColor());
  downloadMusicListJSPanel.setViewportView(downloadListTable);// 创建一个视口(如果有必要)并设置其视图。
  downloadListTable.setBounds(0,0,widthSize/1024*500,heightSize/768*400);
  downloadMusicListJSPanel.setBounds(0,0,widthSize/1024*500,heightSize/768*400);
  downloadListPanel.add(downloadMusicListJSPanel);
 }
 
 /**
  * 加载我的音乐界面内容
  * @param args
  */
 private void loadMyMusicPanel() {
  mySongPanel.setLayout(null);
  mySongPanel.setBounds(0,0,widthSize/1024*750,heightSize/768*400);
  loadMyMusicBar();
  loadMyMusicList();
 }
 
 private void loadMyMusicList()
 {
  myMusicList.setModel(defaultMyMusicModel);
  if (!myMusicFile.exists()) {
   myMusicFile.mkdir();// 如果MY MUSIC文件不存在,则创建
  }
  String[] strs = myMusicFile.list();
  for (int i = 0; i < strs.length; i++) {
   defaultMyMusicModel.addElement(strs[i]);
  }
  myMusicList.setFont(new Font(null, 0, 12));
  myMusicList.setFixedCellHeight(heightSize/768*20);
  myMusicList.setCellRenderer(new MyColor());
  myMusicList.setBounds(0,0,widthSize/1024*750,heightSize/768*22*musicNum*strs.length);
  myMusicListPanel.setViewportView(myMusicList);
  myMusicListPanel.setBounds(0,heightSize/768*20,widthSize/1024*750,heightSize/768*22*musicNum*strs.length);
  mySongPanel.add(myMusicListPanel);
  myMusicList.addMouseListener(this);
 }
 
 /**
  * 将所有面板加入jTablAllPane中
  */
 private void loadTablAllPane() {
  // 设定jTablAllPane的大小及位置
  jTablAllPane.setBounds(0, 0, widthSize / 1024 * 750,
    heightSize / 768 * 400);
  // 设置内部结构
  jTablAllPane.setLayout(null);
  jTablAllPane.addTab("主界面", null, mainWindowPanel, "主界面");
  jTablAllPane.setMnemonicAt(0, KeyEvent.VK_1);
  jTablAllPane.addTab("歌曲列表", null, songListJSPanel, "歌曲列表");
  jTablAllPane.setMnemonicAt(1, KeyEvent.VK_2);
  jTablAllPane.addTab("下载列表", null, downloadListPanel, "下载列表");
  jTablAllPane.setMnemonicAt(2, KeyEvent.VK_3);
  jTablAllPane.addTab("我的音乐", null, mySongPanel, "我的音乐");
  jTablAllPane.setMnemonicAt(3, KeyEvent.VK_4);
  jTablAllPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  jTablAllPane.setBackground(Color.white);
 }
 
 /**
  * 设置窗口属性
  */
 private void setWindowStyle()
 {
  // 设定标题
  this.setTitle("贾秋峰个人音乐共享平台");
  this.setLayout(null);
  this.setSize(widthSize / 1024 * 750, heightSize / 768 * 400);
  // 将jTablAllPane加入本窗口中
  this.add(jTablAllPane);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setResizable(false);
  // 设置注册界面的位置位于中央
  this.setLocationRelativeTo(null);
  this.setVisible(true);
  //myMusicBarState();
 }
 
 /**
  * 加载进度条
  */
 private void loadMyMusicBar()
 {
  myMusicBar = new JProgressBar(JProgressBar.HORIZONTAL);
  myMusicBar.setBounds(0,0,widthSize/1024*750,heightSize/768*20);
  myMusicBar.setMinimum(0);
  myMusicBar.setMaximum(100);
  myMusicBar.setStringPainted(true);
  myMusicBar.setIndeterminate(false);
  myMusicBar.setBorderPainted(true);
  mySongPanel.add(myMusicBar);
 }
 public void run()
 {
  myMusicBar.setValue(0);
  for(int i = 1;i<=100;i++)
  {
   try {
    Thread.sleep(1000);
    myMusicBar.setValue(i);
   } catch (Exception e) {
   }
  }
 }
   
    /**
     * 获取服务器的音乐列表
     */
 public String[] getMusicArrays(){
  Socket sk=null;
  PrintWriter pw;
  BufferedReader br;
  String str;
  String[] musicArrays = null;
  try{
   sk=new Socket("127.0.0.1",8821);
   pw=new PrintWriter(sk.getOutputStream());
   br=new BufferedReader(new InputStreamReader(sk.getInputStream()));  
   //向服务器发送数据
   pw.println("musicList歌曲列表");
   pw.flush();
   //接收服务器返回的数据
   str=br.readLine();
   musicArrays=str.split(",");  //以","分割歌曲信息 
  }catch(Exception e){
   System.out.println("链接超时!");
  }
  return musicArrays;
 }
 
 //实现歌曲下载方法
 public void startDownloadMusic(JList list){
  //初始化文件选择器
  try{
   //获取系统风格
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
   //将系统风格应用于窗体
   javax.swing.SwingUtilities.updateComponentTreeUI(songFileChooser);
   //初始化文件选择器     创建了一个 FileNameExtensionFilter,它将显示 mp3&wma 文件
   FileNameExtensionFilter  filefilter=new FileNameExtensionFilter("mp3&wma格式的音乐","mp3","wma");
   //设置当前文件过滤器
   songFileChooser.setFileFilter(filefilter);
    //设置不可多选
   songFileChooser.setMultiSelectionEnabled(false);
   //设置 JFileChooser,以允许用户只选择文件、只选择目录,或者可选择文件和目录// 选择确认(yes、ok)后返回该值
   songFileChooser.setFileSelectionMode(JFileChooser.APPROVE_OPTION);
  }catch(Exception e){
   e.printStackTrace();
  }
  //获取选择的歌曲
  String Selectedmusic=list.getSelectedValue().toString();
  if(!myMusicFile.exists()){
   myMusicFile.mkdir();
  }
  //用来设定弹出的保存对话框中保存文本框中是你所选中的歌曲名
  File file=new File(myMusicFile,Selectedmusic);
  songFileChooser.setSelectedFile(file);
 
  int i=songFileChooser.showSaveDialog(null);  //弹出一个 "Save File" 文件选择器对话框,当选择i(保存)时,执行下面的
 
  //根据i的值获得用户所选择的歌曲
  if(i==songFileChooser.APPROVE_OPTION){       //选择确认(yes、ok)后返回该值。
   //获取默认的下载路径
   myMusicFile=songFileChooser.getCurrentDirectory();  // 返回当前目录
   //判断下载的歌曲是否已经存在
   if(file.exists()){
    int a=JOptionPane.showConfirmDialog(null, "文件已存在,继续下载将覆盖原来的文件,是否继续下载?","下载",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
    if(a==JOptionPane.YES_OPTION){
     //选择继续下载时与服务器连接进行下载
     musicDownload(songMusicList);
     //音乐下载完成后在我的音乐里增加此歌曲
     addMusicToDownloadPanel();
    }
   }else{
    //如果文件不存在则下载
    musicDownload(songMusicList);
    //将歌曲添加到下载列表中
    addMusicToDownloadPanel();
    //将歌曲增加到我的音乐列表中
    defaultMyMusicModel.addElement(file.getName());  
  }
  }
 
 }
 
 /**
  * 从服务器下载音乐的方法
  */
 public void musicDownload(JList list){
  PrintWriter printWrite;
  //file文件用来存储读取获得的音乐二进制
  File file=new File(songFileChooser.getSelectedFile().toString());
  if(null != file)
  {
  try{
   sk=new Socket("127.0.0.1",8821);
   //向服务器发送请求
   printWrite=new PrintWriter(sk.getOutputStream());
   printWrite.println("downloadMusic开始下载歌曲,"+list.getSelectedValue().toString());
   printWrite.flush();
   //用字节流下载
   downloadMusicByByte(file,sk);
   //用字符流下载
   //downloadMusicByChar(file, sk);
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(sk!=null){
    try{
    sk.close();
   }catch(IOException e){
    e.printStackTrace();
   }
   }
  }
  }
 }
 
 /**
  * 用字节流从服务器下载
  */
 private void downloadMusicByByte(File file,Socket sk)
 {
  DataInputStream dis;
  FileOutputStream fos;
  //用法类似于FileOutputStream
  //ImageOutputStream imageos;
  try {
   dis=new DataInputStream(sk.getInputStream());
   fos = new FileOutputStream(file);
   //imageos=ImageIO.createImageOutputStream(file);
  
   byte[] buffer=new byte[1024];
   int len=0;
   //len = imageos.read(buffer);
   while((len=dis.read(buffer))>0){
    fos.write(buffer,0,len);
    fos.flush();
   }
   dis.close();
   fos.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 用字符流从服务器下载
  */
 private void downloadMusicByChar(File file,Socket sk)
 {
  BufferedReader br;
  BufferedWriter bw;
  try {
   br=new BufferedReader(new InputStreamReader(sk.getInputStream()));
   bw = new BufferedWriter(new FileWriter(file));
   String line;
   while(null != (line = br.readLine())){
    bw.write(line);
    bw.newLine();
   }
   bw.close();
   br.close(); 
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 将下载的歌曲名称加入到下载列表中
  */
 private void addMusicToDownloadPanel(){
  //获取用户下载的歌曲
  String downloadMusic=songMusicList.getSelectedValue().toString();
  //计算用户下载的歌曲的大小    先获取用户下载的地址
  File musicFile=new File(songFileChooser.getSelectedFile().toString());
  double len=musicFile.length()/1000;
  double musicSize=(double)Math.round(len)/1000;
  int a=JOptionPane.showConfirmDialog(null, "是否进入下载界面?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
  if(a==JOptionPane.YES_OPTION){
   // 设置所选择的此选项卡窗格的索引
   jTablAllPane.setSelectedIndex(2);
  }
  Object[] obj=new Object[]{downloadMusic,musicSize+"MB"};
  //在模型中的 0 位置插入一行
  downloadListTableModel.insertRow(0, obj);
  
 }
 
 
 public static void main(String[] args)
 {
  new MainWindow().setVisible(true);
 }

 
 @Override
 public void mouseClicked(MouseEvent e) {
  if (e.getSource() == mainMusicList) {
   // 获取选择的歌曲
   String selectedMusic = mainMusicList.getSelectedValue().toString();
   String imageFileName = selectedMusic.substring(0,
     selectedMusic.length() - 3)
     + "jpg";
   showBackImage(imageFileName);
  } else if (e.getSource() == songMusicList) {
   if (e.getClickCount() == 2) {
    startDownloadMusic(songMusicList);
   }
  } else if (e.getSource() == myMusicList) {
   // 获取选择的歌曲
   String selectedMusic = myMusicList.getSelectedValue().toString();
   File mySongMusicFile = new File(myMusicFile, selectedMusic);
   try {
    new Thread(this).start();
    //new PlayMusic(mySongMusicFile);
   } catch (Exception e1) {
    e1.printStackTrace();
   }

  }
 
 }

 @Override
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub
 
 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub
 
 }

 @Override
 public void mouseEntered(MouseEvent e) {
  // TODO Auto-generated method stub
 
 }

 @Override
 public void mouseExited(MouseEvent e) {
  // TODO Auto-generated method stub
 
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值