使用javaFX做一个简单的音乐播放器
主要功能
1:加载歌曲列表
2:加载歌曲对应歌词
3:歌曲播放进度显示
4:歌词滚动
5:播放 暂停 上一首 下一首
界面如下
组件说明:
1:页面布局 容器 主要是 Group HBox AnchorPane StackPane
2:左侧歌曲列表 使用的ListView 歌曲是下载后放到固定路径
3:右侧歌词使用 Text显示 简单设置了一下样式 歌词文件与歌曲一一对应,放到本地固定路径
4:歌曲进度使用 ProgressBar
5:按钮是Button 设置了一个小的背景图片
使用描述:
点击一首歌曲,开始播放,加载条显示播放进度,歌词向上滚动,使用上一首,下一首顺序切歌,或点击歌曲列表随机切歌。
功能实现说明:
1:加载歌曲列表
//文件前缀
String filePre = "file:///";
Path path = Paths.get(songsPath);
try (DirectoryStream
for (Path entry : entried) {
fileList.add(filePre + songsPath + entry.getFileName());
}
}
ListView
for (int i = 0; i < fileList.size(); i++) {
int a = fileList.get(i).lastIndexOf('/');
int b = fileList.get(i).lastIndexOf('.');
data.addAll(fileList.get(i).substring(a + 1, b));
}
listView.setItems(data);
2:加载歌词
FileInputStream fileInputStream = null;
InputStreamReader reader = null;
BufferedReader reader1 = null;
try {
String mediaString = media.getSource();
String songName = mediaString.substring(mediaString.lastIndexOf("/") + 1, mediaString.lastIndexOf("."));
File lyricFile = new File(songsLyPath + songName + ".txt");
fileInputStream = new FileInputStream(lyricFile);
reader = new InputStreamReader(fileInputStream);
reader1 = new BufferedReader(reader);
StringBuffer strB = new StringBuffer(songName + "\n------------------\n");
// 最后一行 返回null 不要写"" 永远不会等于""会 进入死循环的
String str = "";
while ((str = reader1.readLine()) != null) {
strB.append(str + "\n");
}
ly.setText(strB.toString());
} catch (FileNotFoundException e) {
} finally {
reader1.close();
reader.close();
fileInputStream.close();
}
3:播放进度条实现
KeyValue kv = new KeyValue(pbar.progressProperty(), 1);
KeyFrame kf1 = new KeyFrame(mediaPlayer.getTotalDuration(), kv);
pbTimeLine = new Timeline();
pbTimeLine.getKeyFrames().add(kf1);
4:歌词滚动实现
// 歌词动作
Pane pane = new Pane();
tt = new TranslateTransition();
tt.setNode(pane);
tt.setFromX(0);
tt.setToX(800);
pane.translateXProperty().addListener(new ChangeListener
@Override
public void changed(ObservableValue extends Number> observableValue, Number number, Number t1) {
ly.setTranslateY(-t1.intValue());
}
});
5:切歌
/**
* 切歌
*
* @param flag
*/
private void changeSong(String flag) {
mediaPlayer.stop();
((Group) scene.getRoot()).getChildren().remove(mediaView);
int cunrIndex = next;
if ("next".equals(flag)) {
//下一首
if (next + 1 < fileList.size()) {
cunrIndex = ++next;
}
} else {
//上一首
if (next > 0) {
cunrIndex = --next;
}
}
media = new Media(fileList.get(cunrIndex));
mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
mediaView = new MediaView(mediaPlayer);
((Group) scene.getRoot()).getChildren().addAll(mediaView);
setPauseImg();
newSongProSettin();
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章