<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      初學(xué)-javaFX

      Posted on 2022-04-26 15:48  寫程序到老  閱讀(146)  評(píng)論(0)    收藏  舉報(bào)

      使用javaFX做一個(gè)簡(jiǎn)單的音樂(lè)播放器

      主要功能

      1:加載歌曲列表

      2:加載歌曲對(duì)應(yīng)歌詞

      3:歌曲播放進(jìn)度顯示

      4:歌詞滾動(dòng)

      5:播放  暫停  上一首 下一首

      界面如下

       

      組件說(shuō)明:

      1:頁(yè)面布局 容器 主要是  Group  HBox  AnchorPane  StackPane

      2:左側(cè)歌曲列表 使用的ListView  歌曲是下載后放到固定路徑

      3:右側(cè)歌詞使用 Text顯示 簡(jiǎn)單設(shè)置了一下樣式  歌詞文件與歌曲一一對(duì)應(yīng),放到本地固定路徑

      4:歌曲進(jìn)度使用 ProgressBar

      5:按鈕是Button  設(shè)置了一個(gè)小的背景圖片

      使用描述:

      點(diǎn)擊一首歌曲,開(kāi)始播放,加載條顯示播放進(jìn)度,歌詞向上滾動(dòng),使用上一首,下一首順序切歌,或點(diǎn)擊歌曲列表隨機(jī)切歌。

      功能實(shí)現(xiàn)說(shuō)明:

       1:加載歌曲列表

      //文件前綴
              String filePre = "file:///";
              Path path = Paths.get(songsPath);
              try (DirectoryStream<Path> entried = Files.newDirectoryStream(path)) {
                  for (Path entry : entried) {
                      fileList.add(filePre + songsPath + entry.getFileName());
                  }
              }
      
      
      ListView<String> listView = new ListView<String>(data);
              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  不要寫""  永遠(yuǎn)不會(huì)等于""會(huì) 進(jìn)入死循環(huán)的
                  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:播放進(jìn)度條實(shí)現(xiàn)

      KeyValue kv = new KeyValue(pbar.progressProperty(), 1);
                          KeyFrame kf1 = new KeyFrame(mediaPlayer.getTotalDuration(), kv);
                          pbTimeLine = new Timeline();
                          pbTimeLine.getKeyFrames().add(kf1);

      4:歌詞滾動(dòng)實(shí)現(xiàn)

      //        歌詞動(dòng)作
              Pane pane = new Pane();
              tt = new TranslateTransition();
              tt.setNode(pane);
              tt.setFromX(0);
              tt.setToX(800);
              pane.translateXProperty().addListener(new ChangeListener<Number>() {
                  @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();
          }

       

      博客園  ©  2004-2025
      浙公網(wǎng)安備 33010602011771號(hào) 浙ICP備2021040463號(hào)-3

      主站蜘蛛池模板: 老熟妇欲乱一区二区三区| 国产精品天天看天天狠| 狠狠色婷婷久久综合频道日韩| 在线日韩日本国产亚洲| 国产欧美性成人精品午夜| 中文在线天堂中文在线天堂| 一区二区不卡国产精品| 九九热在线视频观看精品| 亚洲偷自拍国综合| 爱性久久久久久久久| 国产一区二区三区四区五区加勒比| 亚洲69视频| 中文精品无码中文字幕无码专区| 国产精品三级在线观看无码| 蜜臀av一区二区国产精品| 性奴sm虐辱暴力视频网站 | 南澳县| 国产精品色内内在线观看| 国产免费高清69式视频在线观看 | 国产一区二区三区精品自拍 | 亚洲国产欧美一区二区好看电影| 人妻丝袜中文无码AV影音先锋专区| 极品少妇无套内射视频| 中文字幕日韩国产精品| 亚洲超碰97无码中文字幕| 沂水县| 国产成人精品一区二区三区无码| 国产二区三区不卡免费| 粗大的内捧猛烈进出小视频| 九九热99精品视频在线| 日韩精品一区二区蜜臀av| 亚洲中文字幕一区二区| 深夜精品免费在线观看| 不卡国产一区二区三区| 韩国精品福利视频一区二区| 日韩精品国产二区三区| 怀宁县| 成人午夜视频在线| 国产一区二区高潮视频| 国产目拍亚洲精品二区| 久久精品国产91久久麻豆|