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
}
}