/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hadeslee.yoyoplayer.player.ui;
import com.hadeslee.yoyoplayer.equalizer.EqualizerUI;
import com.hadeslee.yoyoplayer.playlist.PlayListUI;
import com.hadeslee.yoyoplayer.lyric.Lyric;
import com.hadeslee.yoyoplayer.lyric.LyricUI;
import com.hadeslee.yoyoplayer.player.BasicController;
import com.hadeslee.yoyoplayer.player.BasicPlayerEvent;
import com.hadeslee.yoyoplayer.player.BasicPlayerException;
import com.hadeslee.yoyoplayer.player.BasicPlayerListener;
import com.hadeslee.yoyoplayer.util.AudioChart;
import com.hadeslee.yoyoplayer.util.Config;
import com.hadeslee.yoyoplayer.util.Loader;
import com.hadeslee.yoyoplayer.playlist.PlayList;
import com.hadeslee.yoyoplayer.playlist.PlayListItem;
import com.hadeslee.yoyoplayer.setting.AudioChartPanel;
import com.hadeslee.yoyoplayer.setting.OptionDialog;
import com.hadeslee.yoyoplayer.tag.SongInfoDialog;
import com.hadeslee.yoyoplayer.util.FileNameFilter;
import com.hadeslee.yoyoplayer.util.Playerable;
import com.hadeslee.yoyoplayer.util.SongInfo;
import com.hadeslee.yoyoplayer.util.Util;
import com.hadeslee.yoyoplayer.util.YOYOSlider;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.File;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.SourceDataLine;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author hadeslee
*/
public class PlayerUI extends JPanel implements Playerable, ActionListener, ChangeListener, BasicPlayerListener {
private static final long serialVersionUID = 20071214L;
//表示播放器的各种状态
public static final int INIT = 0;
public static final int OPEN = 1;
public static final int PLAY = 2;
public static final int PAUSE = 3;
public static final int STOP = 4;
private static Logger log = Logger.getLogger(PlayerUI.class.getName());
private JButton pre, next, play, stop;//四个播放相关按钮
private JButton close, min;//右上角的三个图标
private JLabel about;//关于信息的一个标签,添加了鼠标事件
private JLabel state, channel;//表示标题和信息的一个标签
protected JToggleButton pl, lrc, eq, speaker;//三个状态按钮,和一个音量按钮
private YOYOSlider pos, pan, volume;//三个进度条
private AudioChart audioChart;//示波器
private Lyric lyric;//一个歌词对象
private BasicController player;//基本的播放器对象
private Map audioInfo;//里面存的是所有有关的音频信息
private int playerState;//播放器的当前状态
private Config config;//一个配置对象
private long lastScrollTime;//上一次的滚动歌曲信息的时候
private boolean posValueJump;//表示现在位置条是否在拖动中
private PlayListItem currentItem;//当前正在播放的列表项
private long secondsAmount;//总共用去的秒数
private Loader loader;//一个负责总装载的接口,一般由主窗口实现
private PlayList playlist;//一个播放列表的实现,
private String currentSongName;//当前正在播放的歌曲的名字
private String currentFileOrURL;//当前正在放的歌曲的文件名或者URL路径
private boolean currentIsFile;//当前正在播放的是否是文件,因为可能是网络上的URL
private String titleText;//标题应该显示的内容
private PlayListUI playlistUI;//摠放列表的UI的引用
private EqualizerUI equalizerUI;//调音器的UI引用
private LyricUI lyricUI;//歌词显示面板UI的引用
private SongInfo songInfo;//当前正在播放的歌曲的一些信息,用于滚动显示在时间下面
private boolean posDragging;//指示当前的进度条是否在拖动中
private double posValue;//指示当前的进度条所在的位置的比例
private TimePanel timePanel;//显时间的面板
private SongInfoPanel infoPanel;//显示歌曲信息的面板
private Image[] playImgs, pauseImgs;//用于显示播放和暂停的图标数组
private String currentState;//当前的状态,比如正在播放,停止,暂停
private boolean isSeeked;//是否已经seek了
private double lastRate;//最后的比率
private final Object lock = new Object();
private volatile boolean scrollTitle;//是否滚动标题栏
private String title = Config.NAME;
private Thread thread;//显示任务栏的标题滚动线程
private long seekedTime;//拖过的时间
// private //一个监听鼠标滚轮滚动的监听器,用于调节音量
public PlayerUI() {
super(null);
setPreferredSize(new Dimension(285, 155));
}
/**
* 得到媒体当前的时间,以毫秒为单位
* @return 时间
*/
public long getTime() {
if (player == null) {
return -1;
} else {
return player.getMicrosecondPosition() / 1000 + seekedTime;
}
}
void setLastRate(double rate) {
this.lastRate = rate;
}
public void setPlayList(PlayList playlist) {
this.playlist = playlist;
}
public AudioChart getAudioChart() {
return audioChart;
}
public boolean loadPlaylist() {
boolean loaded = false;
String lastPlay = config.getCurrentFileOrUrl();
log.log(Level.INFO, "lastPlay=" + lastPlay);
if (lastPlay != null) {
for (PlayListItem item : playlist.getAllItems()) {
if (item.getLocation().equals(lastPlay)) {
log.log(Level.INFO, "找到了最后要播的匹配!!");
this.setCurrentSong(item);
break;
}
}
}
return loaded;
}
public void processJumpToFile(int modifiers) {
throw new UnsupportedOperationException("Not yet implemented");
}
public void processPreferences(int modifiers) {
throw new UnsupportedOperationException("Not yet implemented");
}
public void pressStart() {
play.doClick();
}
public void pressEq() {
eq.doClick();
}
public void pressLrc() {
lrc.doClick();
}
public void pressPl() {
pl.doClick();
}
/**
* 给此面板本身以及所有的子组件都添加上这个
* 监听器
*/
private void addMouseVolumeListener() {
MouseVolumeListener mv = new MouseVolumeListener();
this.addMouseWheelListener(mv);
int count = this.getComponentCount();
for (int i = 0; i < count; i++) {
this.getComponent(i).addMouseWheelListener(mv);
}
}
private void initUI() {
没有合适的资源?快使用搜索试试~ 我知道了~
yoyoplayer播放器源码.zip
共491个文件
java:376个
png:86个
form:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 62 浏览量
2023-09-05
13:37:29
上传
评论
收藏 2.75MB ZIP 举报
温馨提示
安卓是一种广泛使用的移动操作系统,具有开放性和灵活性,因此我们选择开发安卓项目源码,以满足开发人员的需求。 首先,我们的安卓项目源码提供了丰富的功能和模块,可以满足各种类型的安卓应用需求。无论是社交、娱乐、教育还是商务,我们的项目源码都提供了相应的功能和界面设计,使得开发人员可以快速构建符合需求的安卓应用。 其次,我们的安卓项目源码具有良好的可扩展性和可定制性。我们将项目源码设计为模块化的结构,开发人员可以根据自己的需求选择和定制所需的功能模块。同时,我们还提供了丰富的文档和示例代码,以帮助开发人员理解和使用项目源码。 我们的安卓项目源码还采用了一些常用的技术和工具,以提高开发效率和代码质量。例如,我们使用了Android Studio作为开发工具,它提供了一系列的功能和工具,如代码编辑器、调试器和模拟器,使得开发人员可以快速开发和测试安卓应用。我们还使用了Java作为主要的编程语言,它是安卓应用开发的主流语言,具有丰富的库和框架,使得开发人员可以轻松实现各种功能和特性。 此外,我们的安卓项目源码还注重用户体验和界面设计。我们提供了一系列的界面模板和样式库,使得开发人员可以轻松创建漂亮而用户友好的安卓界面。我们还提供了一些常用的界面组件和动画效果,以增加安卓应用的交互性和吸引力。 总之,我们的安卓项目源码旨在帮助开发人员快速构建各种类型的安卓应用。无论是社交、娱乐、教育还是商务,我们相信我们的项目源码将能够提供强大的支持和帮助。感谢您对我们项目的关注和支持!
资源推荐
资源详情
资源评论
收起资源包目录
yoyoplayer播放器源码.zip (491个子文件)
.classpath 1KB
Thumbs.db 63KB
Thumbs.db 56KB
Thumbs.db 37KB
Thumbs.db 28KB
Thumbs.db 10KB
Thumbs.db 7KB
LyricSettingPanel.form 32KB
PlayListPanel.form 23KB
SongInfoDialog.form 22KB
AudioChartPanel.form 21KB
SettingPanel.form 18KB
SearchLyricPanel.form 17KB
WebConnectPanel.form 13KB
AboutPanel.form 12KB
WebSearchDialog.form 11KB
PlayPanel.form 9KB
ListBar.form 4KB
PlayerUI.java 73KB
PlayListUI.java 63KB
AbstractID3v2Tag.java 63KB
Config.java 50KB
Util.java 43KB
ID3v24Tag.java 38KB
ID3v24Frame.java 37KB
Lyric.java 35KB
BasicPlayer.java 34KB
OggVorbisTagWriter.java 33KB
LyricSettingPanel.java 31KB
ID3v23Tag.java 30KB
TagOptionSingleton.java 29KB
SongInfoDialog.java 29KB
ID3v23Frame.java 28KB
MP3File.java 27KB
MPEGFrameHeader.java 26KB
ID3v1Tag.java 25KB
MP3AudioHeader.java 24KB
ID3v22Tag.java 24KB
PlayListPanel.java 23KB
ID3v23Frames.java 23KB
AudioChartPanel.java 23KB
ID3v24Frames.java 23KB
Main.java 22KB
Languages.java 22KB
AudioChart.java 20KB
AbstractTag.java 20KB
ID3v22Frames.java 20KB
ID3v11Tag.java 19KB
OggVorbisTagReader.java 19KB
FlacTag.java 18KB
SettingPanel.java 18KB
WebSearchDialog.java 18KB
SearchLyricPanel.java 18KB
MultiImageBorder.java 17KB
MpegInfo.java 17KB
ID3v22Frame.java 17KB
APEv2Tag.java 16KB
AbstractID3v2Frame.java 16KB
ID3Frames.java 16KB
LyricPanel.java 16KB
PlayListItem.java 16KB
BasicPlayList.java 15KB
ID3Tags.java 14KB
Lyrics3v2.java 14KB
VorbisCommentTag.java 13KB
PlayListBorder.java 12KB
WebConnectPanel.java 12KB
AbstractDataType.java 12KB
EqualizerUI.java 12KB
PlayerWindow.java 12KB
AudioFileWriter.java 12KB
FlacTagWriter.java 12KB
ICOFile.java 11KB
MetadataBlockDataPicture.java 11KB
OggPageHeader.java 11KB
FrameBodyTDRC.java 10KB
APEInfo.java 10KB
AbstractTagFrameBody.java 10KB
AudioFileIO.java 10KB
FieldFrameBodyLYR.java 10KB
Tag.java 10KB
FrameBodyAPIC.java 10KB
FrameBodySYLT.java 10KB
OggVorbisInfo.java 9KB
FrameBodyCOMR.java 9KB
ListBar.java 9KB
GenericTag.java 9KB
GenericAudioHeader.java 9KB
TagInfoFactory.java 9KB
PlayPanel.java 9KB
Lyrics3v2Field.java 9KB
NumberHashMap.java 9KB
AboutPanel.java 8KB
TextEncodedStringNullTerminated.java 8KB
FontChooser.java 8KB
Lyrics3v1.java 8KB
Utils.java 8KB
XingFrame.java 8KB
VorbisCommentTagField.java 8KB
StringFixedLength.java 8KB
共 491 条
- 1
- 2
- 3
- 4
- 5
资源评论
Java码库
- 粉丝: 1722
- 资源: 3928
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- c51_2_2.c
- ASCII American Standard Code for Information Interchange
- 一个chm格式的 SQL 函数手册-SQL语言手册文档
- 计算当前月份的天数和剩余天数
- 基于ARM的指令调度和延迟分支
- 基于Vue和TypeScript的极简聊天应用设计源码 - HasChat
- 基于Vue2全家桶和Zcool数据的图片收集网站设计源码 - cool-picture
- 基于C和C++的二维绘制工具设计源码 - DrawPro
- Object.defineProperty 的 IE 补丁object-defineproperty-ie-master.zip
- 整卷预览.mhtml
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功