📄 musicplayer.java
字号:
System.out.println("现在播放第: " + (index + 1) + " 首歌");
return index;
}
// 获取视窗组件
private void getVisualComponent() {
System.out.println("开始获取视窗组件");
visual = player.getVisualComponent();
if (visual != null) {
visual.addMouseListener(new RightMouseListener());
visual.setCursor(new Cursor(Cursor.HAND_CURSOR));
panel_view.add(visual, BorderLayout.CENTER);
panel_view.updateUI();
}
}
// 处理静音事件
public void mediaMute(String mute) {
if (mute == "false" && player != null) {
System.out.println("用户还原声音!");
menuItem_noSound.setSelected(false);
player.getGainControl().setMute(false);
} else if (mute == "true" && player != null) {
System.out.println("用户要求静音声音!");
menuItem_noSound.setSelected(true);
player.getGainControl().setMute(true);
}
}
// 一个线程类处理进度条
private class ControlProgrecess extends Thread {
private boolean temp = true;
public void run() {
while (newTime <= fileTime && temp) {
try {
Thread.sleep(1000);
slider_time.setValue((int) (newTime++));
lable_infor.setText("音量:" + jSlider_sound.getValue() + " "
+ "进度:" + (int) newTime / 3600 + ":"
+ (int) (newTime % 3600) / 60 + ":"
+ (int) (newTime % 60));
System.out.println("音量:" + jSlider_sound.getValue() + " "
+ "进度:" + (int) newTime / 3600 + ":"
+ (int) (newTime % 3600) / 60 + ":"
+ (int) (newTime % 60));
System.out.println("======================");
} catch (InterruptedException interruptedexception) {
}
}
temp = true;
}
public void stopThread() {
temp = false;
}
}
// 打开文件添加到列表并自动播放
public File[] open() {
System.out.println("准备打开文件选择器....");
JFileChooser fileChooser = new JFileChooser();
// 文件过滤器
FileNameExtensionFilter filter = new FileNameExtensionFilter("mp3",
"MP3", "wav", "mpg", "mpeg", "wav", "avi", "gif", "GIF", "PNG",
"png", "jpg", "JPG");
fileChooser.setFileFilter(filter);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);// 仅限显示文件
fileChooser.setMultiSelectionEnabled(true);// 允许多选
System.out.println("打开成功: 显示文件选择器");
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
System.out.println("用户取消选择文件");
return null;
} else {
System.out.println("用户选择文件" + fileChooser.getSelectedFile());
files = fileChooser.getSelectedFiles();
System.out.println("正在把文件添加到列表");
addList(files);
saveListToFile(files);
if (player == null) {
playMedia(randomPodePlayer(list.getLastVisibleIndex()));
}
return files;
}
}
// 把列表中内容保存到文件
private void saveListToFile(File[] files) {
BufferedWriter bf = null;
try {
bf = new BufferedWriter(new FileWriter(userInfro));
for (int i = 0; i < files.length; i++) {
bf.write(files[i] + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bf.flush();
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 从文件中读取列表对象
private void readFileToList() {
BufferedReader br = null;
try {
if (!userInfro.exists()) {
userInfro.createNewFile();
}
if (userInfro.exists()) {
br = new BufferedReader(new FileReader(userInfro));
String filePath;
for (int i = 1; (filePath = br.readLine()) != null; i++) {
fileDirection.addElement(new File(filePath));
fileName.addElement(i
+ ". "
+ filePath
.substring(filePath.lastIndexOf('\\') + 1));
}
System.out.println("读写完成................");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 把文件添加到列表
public void AutoAddFileToList() {
list.setListData(fileName);
popupList.setListData(fileName);
randomPodePlayer(fileName.size());
}
// 把文件添加到列表
public void addList(File[] file) {
System.out.println(file.length);
System.out.println(fileName.size());
for (int i = fileName.size(); i < file.length; i++) {
fileName.add(i, i + 1 + ". " + file[i].getName());
fileDirection.add(i, file[i]);
}
popupList.setListData(fileName);
list.setListData(fileName);
list.setSelectedIndex(0);
fileName.trimToSize();
fileDirection.trimToSize();
}
// 从列表中删除文件
public void removeFile(int fileIndex, boolean ifAll) {
if ((fileIndex < fileName.size()) && !ifAll && fileIndex != -1) {
fileName.removeElementAt(fileIndex);
fileDirection.removeElementAt(fileIndex);
} else if (fileIndex != -1) {
fileName.clear();
fileDirection.clear();
}
list.setListData(fileName);
popupList.setListData(fileName);
list.setSelectedIndex(fileIndex);
System.out.println("用户删除了下标为" + fileIndex);
// saveListToFile((File[]) fileDirection.toArray());
list.updateUI();
}
// 生成托盘
private void initSystemTray() {
System.out.println("正在生成托盘...");
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("img/icon.png"); // getClass.getResource("");
this.addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
dispose();
}
});
PopupMenu popupMenu = new PopupMenu();
MenuItem exitItem_exit = new MenuItem("退出");
exitItem_exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
System.exit(0);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
popupMenu.add(exitItem_playOrPause_SystemTray);
popupMenu.add(exitItem_stop_SystemTray);
popupMenu.add(exitItem_exit);
TrayIcon trayIcon = new TrayIcon(image, "java播放器", popupMenu);
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
setExtendedState(JFrame.NORMAL);
setVisible(true);
}
}
});
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println(e);
}
}
// 更换标题栏图标
public void changWindowIcon() {
System.out.println("正在更换标题图标");
try {
File imagefile = new File("img/icon.png");
URL url = imagefile.toURI().toURL();
Image image = this.getToolkit().getImage(url);
this.setIconImage(image);
} catch (Exception s) {
s.printStackTrace();
}
}
// 程序入口
public static void main(String[] aegs) {
System.out.println("程序正在初始化! 请稍等......");
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
MusicPlayer myPlayer = new MusicPlayer();
System.out.println("初始化窗口完成!正在显示");
myPlayer.setVisible(true);
}
// 类用于处理右键事件
class RightMouseListener extends MouseAdapter {
boolean flag = true;
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
int mods = e.getModifiers();
if ((mods & 4) != 0 && (e.getSource() == visual)
|| (e.getSource() == panel_view)) {
popupMenuList.add(menuItem_paly_Popup);
popupMenuList.add(menuItem_stop_Popup);
popupMenuList.add(menuItem_controlPlayer);
popupMenuList.add(menuItem_allScreen);
menuItem_controlPlayer.add(menuItem_skinForwind_Popup);
menuItem_controlPlayer.add(menuItem_rewind_Popup);
if (e.getSource() == visual) {
popupMenuList.show(visual, e.getX(), e.getY());
}
if ((mods & 4) != 0 && e.getSource() == panel_view) {
popupMenuList.show(panel_view, e.getX(), e.getY());
}
} else if ((mods & 4) != 0 && e.getSource() == list) {
popupMenuAll.add(menuItem_playSelect);
popupMenuAll.add(menuItem_delete);
popupMenuAll.add(menuItem_Addfile);
popupMenuAll.add(menuItem_deleteAll);
popupMenuAll.show(list, e.getX(), e.getY());
} else if (e.getClickCount() == 2 && visual != null
&& e.getSource() == visual) {
if (flag) {
fullScreenView();
flag = false;
} else {
originalView();
flag = true;
}
} else if (e.getClickCount() == 1 && visual != null
&& e.getSource() == visual) {
if (player != null)
if (tempPause && e.getClickCount() <= 1) {
pauseMedia();
tempPause = false;
} else {
if (pauseTime != null) {
pauseToPlayer();
tempPause = true;
}
}
}
}
}
// 进入全屏
private void fullScreenView() {
AllScreenOrOriginal = true;
getFrameInfor();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension fullSize = tk.getScreenSize();
getRootPane().setWindowDecorationStyle(0);
setSize(fullSize);
setLocation(0, 0);
remove(menubar);
remove(panel_down);
getContentPane().setSize(fullSize);
setSize(fullSize);
contentPane.remove(splitpane);
this.setAlwaysOnTop(true);
getContentPane().add(visual, BorderLayout.CENTER);
validate();
System.out.println("用户选择全屏!");
}
// 返回全屏前的状态
private void originalView() {
setFrameOrignal();
getContentPane().remove(visual);
getRootPane().setWindowDecorationStyle(1);
add(menubar, BorderLayout.NORTH);
this.setAlwaysOnTop(false);
contentPane.add(panel_down, BorderLayout.SOUTH);
contentPane.add(splitpane, BorderLayout.CENTER);
panel_view.add(visual, BorderLayout.CENTER);
validate();
System.out.println("用户退出全屏!");
}
// 暂停播放
public void pauseMedia() {
pauseTime = player.getMediaTime();
playerOrPause = false;
((ControlProgrecess) timeThread).stopThread();
player.stop();
panel_play.remove(but_pause);
panel_play.add(but_play);
panel_play.updateUI();
System.out.println("暂停播放...........");
}
// 从暂停位置开始播放
private void pauseToPlayer() {
timeThread = new ControlProgrecess();
playerOrPause = true;
timeThread.start();
player.start();
panel_play.remove(but_play);
panel_play.add(but_pause);
panel_play.updateUI();
System.out.println("继续播放...........");
}
// 获取全屏前的窗口的大小,位置
public void getFrameInfor() {
width = getWidth();
height = getHeight();
x = getX();
y = getY();
}
// 设置还原全屏时保存的大小和位置
public void setFrameOrignal() {
setSize(width, height);
setLocation(x, y);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -