📄 mainplayer.java
字号:
/**************************************************************************
* (C) Copyright 2008 by Tao Liuyuan and Zhang Shuitao. *
* All Rights Reserved. *
* *
* Project : KYPlayer *
* File : KYPlayer.java *
* JDK version used : jdk1.6.0_u4 *
* Version : 1.00 *
* Created : 2008.7.6 by we *
*************************************************************************/
package MP3Player;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.URL;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.GainControl;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
* 播放器主界面类,该类处理播放器主面板的各种逻辑功能.
* @author we
*/
class MainPlayer extends JFrame implements ControllerListener {
/**
* 自动生成的序列化值
*/
private static final long serialVersionUID = 1L;
/**
* 移动窗口时的鼠标起始位置
*/
Point mouseOriginPoint = new Point();
/**
* JMF播放器接口
*/
private Player player;
/**
* 准备播放的媒体文件
*/
private File mediaFile;
/**
* 用户配置记录
*/
private ConfigRecord configRecord;
/**
* 背景图片面板
*/
private ImagePanel mainPanel;
/**
* 选择媒体文件按钮
*/
private CustomizeButton selectButton;
/**
* 播放上一首按钮
*/
private CustomizeButton preButton;
/**
* 播放下一首按钮
*/
private CustomizeButton nextButton;
/**
* 播放按钮--播放时隐藏
*/
private CustomizeButton playButton;
/**
* 暂停按钮--暂停时隐藏
*/
private CustomizeButton pauseButton;
/**
* 停止按钮
*/
private CustomizeButton stopButton;
/**
* 最小化按钮
*/
private CustomizeButton minimumButton;
/**
* 模式按钮--控制界面在完整和迷你模式之间切换
*/
private CustomizeButton modeButton;
/**
* 关闭按钮
*/
private CustomizeButton closeButton;
/**
* 歌词窗口双态按钮--显示或隐藏歌词窗口
*/
private CustomizeToggleButton lyricButton;
/**
* 视频窗口双态按钮--显示或隐藏视频窗口
*/
private CustomizeToggleButton videoButton;
/**
* 播放列表双态按钮--显示或隐藏播放列表窗口
*/
private CustomizeToggleButton playListButton;
/**
* 静音双态按钮
*/
private CustomizeToggleButton disableSoundButton;
/**
* 是否静音
*/
private boolean soundDisabled = false;
/**
* 播放列表窗口
*/
private PlayListFrame playListFrame;
/**
* 播放器状态标签--播放 暂停 停止
*/
private JLabel playerStateLabel;
/**
* 声音状态标签--显示静音或者音量
*/
private JLabel soundStateLabel;
/**
* 播放时间控制条
*/
private TimeControl timeControl;
/**
* 音量控制条
*/
private SoundControl soundControl;
/**
* JMF音量控制器
*/
private GainControl gainControl;
/**
* 音量
*/
private float gainLevel = 0;
/**
* 媒体信息面板
*/
private MediaInfoLabel mediaInfoLabel;
/**
* 播放时间标签
*/
private JLabel timeLabel;
/**
* 主窗口构造函数,取消了标题栏,载入初始状态并加载控件.
*/
public MainPlayer() {
super("KYPlayer");
setUndecorated(true);
setLayout(null);
loadConfig();
//给按钮加载图像
selectButton = new CustomizeButton("transparentButton", "selectButton");
preButton = new CustomizeButton("transparentButton", "preButton");
nextButton = new CustomizeButton("transparentButton", "nextButton");
stopButton = new CustomizeButton("transparentButton", "stopButton");
pauseButton = new CustomizeButton("pauseButton", "pauseButtonAlt");
playButton = new CustomizeButton("playButton", "playButtonAlt");
modeButton = new CustomizeButton("littleButton", "littleButtonAlt");
disableSoundButton = new CustomizeToggleButton("soundButton");
closeButton = new CustomizeButton("littleButton", "littleButtonAlt");
minimumButton = new CustomizeButton("littleButton", "littleButtonAlt");
playListButton = new CustomizeToggleButton("PFButton");
//为按钮添加注释下标
preButton.setToolTipText("上一首");
nextButton.setToolTipText("下一首");
stopButton.setToolTipText("停止");
selectButton.setToolTipText("播放文件");
playButton.setToolTipText("播放");
pauseButton.setToolTipText("暂停");
modeButton.setToolTipText("迷你模式");
disableSoundButton.setToolTipText("声音开关");
closeButton.setToolTipText("退出(Alt+X)");
minimumButton.setToolTipText("最小化");
playListButton.setToolTipText("播放列表");
//为按钮注册事件
preButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
playPre();
}
});
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
playNext();
}
});
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
stop();
}
});
selectButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
selectFileToPlay();
}
});
disableSoundButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
soundDisabled = disableSoundButton.isSelected();
setSoundLabel("");
setGain();
}
});
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
play();
}
});
pauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
pause();
}
});
minimumButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
minimum();
}
});
modeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
changeDisplayModel();
}
});
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
close();
}
});
playListButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
showPlayListFrame(!playListFrame.isVisible());
}
});
//设定按钮位置
preButton.setBounds(40, 91, 8, 7);
nextButton.setBounds(65, 91, 8, 7);
stopButton.setBounds(99, 91, 6, 6);
selectButton.setBounds(192, 91, 7, 6);
playButton.setBounds(161, 91, 7, 7);
pauseButton.setBounds(129, 90, 7, 7);
minimumButton.setBounds(245, 0, 8, 5);
modeButton.setBounds(255, 0, 8, 5);
closeButton.setBounds(265, 0, 8, 5);
playListButton.setBounds(225, 57, 22, 7);
disableSoundButton.setBounds(120, 41, 11, 11);
//加载按钮到主面板中
add(preButton);
add(nextButton);
add(stopButton);
add(selectButton);
add(playButton);
add(pauseButton);
add(minimumButton);
add(modeButton);
add(closeButton);
add(playListButton);
add(disableSoundButton);
disableSoundButton.setSelected(soundDisabled);
playListButton.setSelected(configRecord.isShowPlayListFrame());
//声音状态标签
soundStateLabel = new JLabel("立体声");
soundStateLabel.setFont(new Font("宋体", Font.PLAIN, 13));
soundStateLabel.setForeground(Color.cyan);
soundStateLabel.setBounds(150, 39, 75, 15);
setSoundLabel("");
add(soundStateLabel);
//播放状态标签
playerStateLabel = new JLabel("状态:停止");
playerStateLabel.setFont(new Font("宋体", Font.PLAIN, 13));
playerStateLabel.setForeground(Color.cyan);
playerStateLabel.setBounds(27, 37, 75, 15);
add(playerStateLabel);
timeControl = new TimeControl(this);
timeControl.setBounds(9, 71, 240, 5);
add(timeControl);
soundControl = new SoundControl(this);
soundControl.setBounds(109, 59, 109, 5);
soundControl.setProcessPercent(gainLevel);
add(soundControl);
mediaInfoLabel = new MediaInfoLabel();
mediaInfoLabel.setBounds(110, 24, 154, 13);
add(mediaInfoLabel);
timeLabel = new JLabel("00:00");
timeLabel.setFont(new Font("Small Fonts", Font.PLAIN, 14));
timeLabel.setForeground(Color.white);
timeLabel.setBounds(30, 56, 46, 15);
add(timeLabel);
mainPanel = new ImagePanel("TTMain");
mainPanel.setBounds(0, 0, 275, 116);
add(mainPanel);
//快捷键
addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
if (e.isAltDown() && e.getKeyCode() == KeyEvent.VK_X) {
close();
}
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
});
//移动窗口相关操作
addMouseListener(new MouseListener() {
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent e) {
// 当鼠标按下的时候获得鼠标当前的位置
mouseOriginPoint.x = e.getX();
mouseOriginPoint.y = e.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
});
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
//左键拖拽窗口重新定位
if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
setLocation((int) (getX() + e.getX() - mouseOriginPoint
.getX()),
(int) (getY() + e.getY() - mouseOriginPoint.getY()));
playListFrame.setLocation(getX(), getY() + getHeight());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -