Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.93 KB | None | 0 0
  1. package sample;
  2.  
  3. import javafx.beans.InvalidationListener;
  4. import javafx.beans.Observable;
  5. import javafx.beans.value.ObservableValue;
  6. import javafx.collections.ListChangeListener;
  7. import javafx.event.ActionEvent;
  8. import javafx.fxml.FXML;
  9. import javafx.fxml.FXMLLoader;
  10. import javafx.scene.Parent;
  11. import javafx.scene.Scene;
  12. import javafx.scene.control.*;
  13. import javafx.scene.control.cell.CheckBoxListCell;
  14. import javafx.scene.image.ImageView;
  15. import javafx.collections.FXCollections;
  16. import javafx.collections.ObservableList;
  17. import javafx.scene.media.Media;
  18. import javafx.scene.media.MediaPlayer;
  19.  
  20. import java.io.File;
  21. import java.io.IOException;
  22. import java.nio.file.FileAlreadyExistsException;
  23. import java.nio.file.Files;
  24. import java.nio.file.Path;
  25. import java.nio.file.Paths;
  26. import java.util.ArrayList;
  27. import java.util.Arrays;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30.  
  31. import javafx.scene.control.ListView;
  32. import javafx.scene.control.Button;
  33. import javafx.stage.FileChooser;
  34. import javafx.stage.Stage;
  35.  
  36. import javafx.scene.control.Label;
  37. import javafx.util.Callback;
  38. import org.controlsfx.control.CheckListView;
  39.  
  40. public class BeatCloudMainWindowController {
  41.  
  42.  
  43. @FXML
  44. private Label nameOfSongBeingPlayed, addNewPlaylist;
  45.  
  46. @FXML
  47. private ImageView buttonPause;
  48.  
  49. @FXML
  50. private Button searchFieldButton, buttonSignOut, buttonCreatePlaylist;
  51.  
  52. @FXML
  53. private TextField searchField, playlistTextField;
  54.  
  55. @FXML
  56. private ImageView buttonSkipNext, btn_pause;
  57.  
  58. @FXML
  59. private ImageView buttonSkipPrev;
  60.  
  61. @FXML
  62. private ImageView buttonPlay;
  63.  
  64. @FXML
  65. private Slider timeSlider, volumeSlider;
  66.  
  67. @FXML
  68. private ListView<String> listOfSongs = new ListView<String>();
  69.  
  70. @FXML
  71. private Button buttonFileChooser;
  72.  
  73. @FXML
  74. private CheckListView<String> checkListView;
  75.  
  76. @FXML
  77. private ListView<String> listOfPlaylists = new ListView<String>();
  78.  
  79. @FXML
  80. private Button buttonEditPlaylist, buttonSavePlaylistEdits, buttonDeletePlaylist;
  81.  
  82. private int index = 0;
  83. private int maxSong;
  84. private String[] songs;
  85. private Media[] me;
  86. private MediaPlayer[] mp;
  87. private int pageIndex = 0;
  88. private int noOfPlaylists;
  89. private boolean checkState = false;
  90. private ObservableList<String> data;
  91. private int[] playlistIDList;
  92. private String playlistID;
  93.  
  94.  
  95. private void getMax() {
  96. DB.selectSQL("select max(fldSongID) from tblSong");
  97. String getMaxSong = DB.getData();
  98. maxSong = Integer.parseInt(getMaxSong);
  99. DB.getData();
  100.  
  101. }
  102.  
  103. private void getAllPlaylist()
  104. {
  105. DB.selectSQL("select COUNT(fldPlaylistName) from tblPlaylist");
  106. noOfPlaylists = Integer.parseInt(DB.getData());
  107. DB.getData();
  108. }
  109.  
  110. private void getplaylistID()
  111. {
  112. getAllPlaylist();
  113. playlistIDList = new int [noOfPlaylists];
  114. int i = 0;
  115. DB.selectSQL("select fldPlaylistID from tblPlaylist");
  116. do {
  117. playlistID = DB.getData();
  118. System.out.println(playlistID);
  119.  
  120. if (playlistID.equals(DB.NOMOREDATA)) {
  121. break;
  122. } else {
  123. playlistIDList[i] = Integer.parseInt(playlistID);
  124. i++;
  125. }
  126. } while (true);
  127.  
  128. System.out.println("kik:"+ Arrays.toString(playlistIDList));
  129. }
  130.  
  131. private void loadPlaylists()
  132. {
  133. getAllPlaylist();
  134.  
  135. System.out.println( "nopd"+noOfPlaylists);
  136.  
  137. String[] playlists = new String[noOfPlaylists];
  138.  
  139. int i = 0;
  140. DB.selectSQL("select fldPlaylistName from tblPlaylist");
  141. do {
  142. String playlistname = DB.getData();
  143. System.out.println(playlistname);
  144.  
  145. if (playlistname.equals(DB.NOMOREDATA)) {
  146. break;
  147. } else {
  148. playlists[i] = playlistname;
  149. i++;
  150. }
  151. } while (true);
  152.  
  153. System.out.println("kik:"+ Arrays.toString(playlistIDList));
  154.  
  155.  
  156. ObservableList<String> data = FXCollections.observableArrayList(playlists);
  157. listOfPlaylists.setItems(data);
  158. buttonEditPlaylist.setVisible(false);
  159.  
  160. /**
  161. String[] playlists;
  162. playlists = new String[noOfPlaylists];
  163.  
  164. for (int i = 5; i < noOfPlaylists+5; i++)
  165. {
  166. DB.selectSQL("Select fldPlaylistName FROM tblPlaylist where fldPlaylistID = '" + i + "'");
  167. playlists[i-5] = DB.getData();
  168. }
  169. DB.getData();
  170.  
  171. data = FXCollections.observableArrayList(playlists);
  172. listOfPlaylists.setItems(data);
  173. */
  174.  
  175. }
  176.  
  177. private void loadsongs ()
  178. {
  179. getMax();
  180. songs = new String[maxSong];
  181.  
  182. for (int i = 1; i < maxSong + 1; i++) {
  183. DB.selectSQL("Select fldSongName from tblSong where fldSongID = '" + i + "'");
  184. songs[i - 1] = DB.getData();
  185. DB.selectSQL("Select fldSongArtist from tblSong where fldSongID = '" + i + "'");
  186. songs[i - 1] += " - " + DB.getData();
  187.  
  188. }
  189.  
  190. data = FXCollections.observableArrayList(songs);
  191. listOfSongs.setItems(data);
  192.  
  193. me = new Media[maxSong];
  194.  
  195. DB.selectSQL("SELECT fldPath FROM tblSong");
  196.  
  197. do {
  198. String fileName = DB.getData();
  199.  
  200. if (fileName.equals(DB.NOMOREDATA)) {
  201. break;
  202. } else {
  203. String path = new File(fileName).getAbsolutePath();
  204. me[index] = new Media(new File(path).toURI().toString());
  205. index += 1;
  206. }
  207. } while (true);
  208.  
  209. mp = new MediaPlayer[maxSong];
  210.  
  211. index = 0;
  212. for (int i = 0; i < me.length; i++)
  213. {
  214. mp[i] = new MediaPlayer(me[i]);
  215. }
  216. }
  217.  
  218. @FXML
  219. private void initialize() throws Exception { // can now add throws clause
  220.  
  221. getplaylistID();
  222. loadsongs();
  223. loadPlaylists();
  224. checkState = false;
  225.  
  226.  
  227. // The minimum value.
  228. volumeSlider.setMin(0);
  229. // The maximum value.
  230. volumeSlider.setMax(100);
  231. // Current value
  232. volumeSlider.setValue(80);
  233. volumeSlider.setShowTickLabels(true);
  234. volumeSlider.setShowTickMarks(true);
  235. volumeSlider.setBlockIncrement(10);
  236. volumeSlider.setValue(mp[index].getVolume() * 100);
  237. volumeSlider.valueProperty().addListener(new InvalidationListener() {
  238. @Override
  239. public void invalidated(Observable observable) {
  240. mp[index].setVolume(volumeSlider.getValue() / 100);
  241. }
  242. });
  243.  
  244. }
  245.  
  246. private int getFileName(String selected) {
  247. System.out.println(selected);
  248. for (int i = 0; i < maxSong; i++)
  249. {
  250. if (songs[i].equals(selected))
  251. {
  252. index = i;
  253. break;
  254. }
  255. }
  256. return index;
  257. }
  258.  
  259. @FXML
  260. private void handleChoice() {
  261. getFileName(listOfSongs.getSelectionModel().getSelectedItem());
  262. }
  263.  
  264. @FXML
  265. private void handlePlaylistChoice()
  266. {
  267. buttonEditPlaylist.setVisible(true);
  268. checkState = true;
  269. DB.selectSQL("SELECT fldPlaylistID FROM tblPlaylist WHERE fldPlayListName = '"+listOfPlaylists.getSelectionModel().getSelectedItem()+"'");
  270. playlistID = DB.getData();
  271. System.out.println("PlaylistID!" + playlistID);
  272.  
  273. DB.selectSQL("SELECT COUNT(fldSongID) FROM tblConnect WHERE fldPlaylistID = '"+playlistID+"'");
  274. int noOfSongsInPlaylist = Integer.parseInt(DB.getData());
  275.  
  276. String[] playlistSongsID = new String[noOfSongsInPlaylist];
  277. String[] playlistSongs = new String[noOfSongsInPlaylist];
  278.  
  279. DB.selectSQL("SELECT fldSongID FROM tblConnect WHERE fldPlaylistID = '"+playlistID+"'");
  280.  
  281. for (int i = 0; i < noOfSongsInPlaylist; i++)
  282. {
  283. playlistSongsID[i] = DB.getData();
  284. }
  285.  
  286. for (int i = 0; i < noOfSongsInPlaylist; i++)
  287. {
  288. DB.selectSQL("SELECT fldSongName FROM tblSong WHERE fldSongID = '"+playlistSongsID[i]+"'");
  289. playlistSongs[i] = DB.getData();
  290. DB.selectSQL("SELECT fldSongArtist FROM tblSong WHERE fldSongID = '"+playlistSongsID[i]+"'");
  291. playlistSongs[i] += " - " + DB.getData();
  292. }
  293. DB.getData();
  294.  
  295. data = FXCollections.observableArrayList(playlistSongs);
  296. listOfSongs.setItems(data);
  297.  
  298. }
  299.  
  300. private void getTimeSlider() {
  301. timeSlider.setMax(me[index].getDuration().toSeconds());
  302. System.out.println("Duration: " + me[index].getDuration().toSeconds());
  303. mp[index].currentTimeProperty().addListener((obs, oldTime, newTime) -> {
  304. if (!timeSlider.isValueChanging()) {
  305. timeSlider.setValue(newTime.toSeconds());
  306. }
  307. });
  308. }
  309.  
  310. @FXML
  311. private void handlePlay() {
  312. // getTimeSlider();
  313.  
  314. for (int i = 0; i < mp.length; i++)
  315. {
  316. mp[i].pause();
  317. }
  318. // Play the mediaPlayer with the attached music
  319. for (int i = 0; i < mp.length; i++) {
  320. mp[index].play();
  321. nameOfSongBeingPlayed.setText(songs[index]);
  322. buttonPlay.setVisible(false);
  323. btn_pause.setVisible(true);
  324.  
  325. }
  326. }
  327.  
  328.  
  329.  
  330.  
  331. @FXML
  332. private void handleSkip() {
  333.  
  334. int[] playing = new int[data.size()];
  335.  
  336. for (int i = 0; i < playing.length; i++)
  337. {
  338. for (int k = 0; k < maxSong; k++) {
  339. if (songs[k].equals(data.get(i))) {
  340. playing[i] = k;
  341. break;
  342. }
  343. }
  344. }
  345.  
  346.  
  347. for (int i = 0; i < mp.length; i++)
  348. {
  349. mp[i].stop();
  350. }
  351.  
  352. System.out.println("hvad er checkstate: "+checkState);
  353.  
  354. if (checkState)
  355. {
  356. for (int i = 0; i < playing.length; i++)
  357. {
  358. if(playing[i] == index)
  359. {
  360. if (i == playing.length-1)
  361. {
  362. index = playing[0];
  363. mp[index].play();
  364. break;
  365. }
  366. else
  367. {
  368. index = playing[i+1];
  369. mp[index].play();
  370. break;
  371. }
  372. }
  373. }
  374. }
  375. else
  376. {
  377. if (index == mp.length-1)
  378. {
  379. index = 0;
  380. }
  381. else
  382. {
  383. index += 1;
  384. }
  385. mp[index].play();
  386. }
  387.  
  388. nameOfSongBeingPlayed.setText(songs[index]);
  389. buttonPlay.setVisible(false);
  390. btn_pause.setVisible(true);
  391. getTimeSlider();
  392. }
  393.  
  394. @FXML
  395. private void handlePrevious() {
  396.  
  397. int[] playing = new int[data.size()];
  398.  
  399. for (int i = 0; i < playing.length; i++)
  400. {
  401. for (int k = 0; k < maxSong; k++) {
  402. if (songs[k].equals(data.get(i))) {
  403. playing[i] = k;
  404. break;
  405. }
  406. }
  407. }
  408.  
  409.  
  410. for (int i = 0; i < mp.length; i++)
  411. {
  412. mp[i].stop();
  413. }
  414.  
  415. if (checkState)
  416. {
  417. for (int i = 0; i < playing.length; i++)
  418. {
  419. if(playing[i] == index)
  420. {
  421. if (i == 0)
  422. {
  423. index = playing[playing.length-1];
  424. mp[index].play();
  425. break;
  426. }
  427. else
  428. {
  429. index = playing[i-1];
  430. mp[index].play();
  431. break;
  432. }
  433. }
  434. }
  435. }
  436. else
  437. {
  438. if (index == 0)
  439. {
  440. index = mp.length-1;
  441. }
  442. else
  443. {
  444. index -= 1;
  445. }
  446. mp[index].play();
  447. }
  448.  
  449. nameOfSongBeingPlayed.setText(songs[index]);
  450. buttonPlay.setVisible(false);
  451. btn_pause.setVisible(true);
  452. nameOfSongBeingPlayed.setText(songs[index]);
  453. getTimeSlider();
  454.  
  455. }
  456.  
  457. @FXML
  458. private void handleStop() {
  459.  
  460. for (int i = 0; i < mp.length; i++)
  461. {
  462. mp[i].stop();
  463. }
  464. buttonPlay.setVisible(true);
  465. btn_pause.setVisible(false);
  466. }
  467.  
  468. @FXML
  469. private void handlePause() {
  470.  
  471. for (int i = 0; i < mp.length; i++)
  472. {
  473. mp[i].pause();
  474. }
  475. buttonPlay.setVisible(true);
  476. btn_pause.setVisible(false);
  477. }
  478.  
  479.  
  480. @FXML
  481. private void handleSignOut() throws IOException {
  482. mp[index].stop();
  483. buttonSignOut.getScene().getWindow().hide();
  484. Stage login = new Stage();
  485. Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));
  486. Scene scene = new Scene(root, 1000, 600);
  487. login.setScene(scene);
  488. login.show();
  489. }
  490.  
  491. @FXML
  492. private void handleSearch()
  493. {
  494. showSearched(pageIndex);
  495. }
  496.  
  497. private void showSearched(int type)
  498. {
  499.  
  500. playlistTextField.setVisible(false);
  501. buttonCreatePlaylist.setVisible(false);
  502. String searchWord = searchField.getText();
  503. searchWord = searchWord.toLowerCase();
  504. ArrayList<String> search = new ArrayList<String>();
  505.  
  506. for (int i = 0; i < maxSong; i++) {
  507. if (songs[i].toLowerCase().contains(searchWord)) {
  508. search.add(songs[i]);
  509. }
  510. }
  511.  
  512. ObservableList<String> Searchdata = FXCollections.observableArrayList(search);
  513. if (type == 0)
  514. {
  515. listOfSongs.setVisible(true);
  516. listOfSongs.setItems(Searchdata);
  517. }
  518. else if (type == 1)
  519. {
  520. checkListView.setVisible(true);
  521. playlistTextField.setVisible(true);
  522. buttonCreatePlaylist.setVisible(true);
  523. checkListView.setItems(Searchdata);
  524. }
  525. }
  526.  
  527. private List<String> playListList;
  528.  
  529. @FXML
  530. private void handleAddPlaylist() {
  531.  
  532. pageIndex = 1;
  533. listOfSongs.setVisible(false);
  534. checkListView.setVisible(true);
  535. playlistTextField.setVisible(true);
  536. buttonCreatePlaylist.setVisible(true);
  537. //buttonFileChooser.setVisible(true);
  538.  
  539. ObservableList<String> data = FXCollections.observableArrayList(songs);
  540. checkListView.setItems(data);
  541.  
  542. checkListView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
  543. public void onChanged(Change<? extends String> c)
  544. {
  545. ObservableList<String> playList = FXCollections.observableArrayList(checkListView.getCheckModel().getCheckedItems());
  546. playListList = playList.stream().collect(Collectors.toList());
  547. }
  548. });
  549.  
  550.  
  551. //1) User clicks "Create playlist". - DONE
  552. //2) User can enter a name - DONE
  553. //3) User can check which songs to add to playlist - Done
  554. //TODO 4) User can "Save playlist" which saves it to the DB
  555. //TODO 7) The "Choose music file" is shown when "all songs" button is pressed, but it should disappear
  556.  
  557. }
  558.  
  559.  
  560. @FXML
  561. private void handleAddMusic() {
  562.  
  563. FileChooser chooseSongs = new FileChooser();
  564. chooseSongs.getExtensionFilters().add(new FileChooser.ExtensionFilter("Audio files (*.mp3), (*.m4a) or (.wav)", "*.mp3","*.wav","*.m4a"));
  565. List<File> f = chooseSongs.showOpenMultipleDialog(null);
  566. for (File file : f) {
  567. System.out.println(file.getAbsolutePath());
  568.  
  569. Path sourcePath = Paths.get(file.getAbsolutePath());
  570. Path songName = Paths.get(file.getName());
  571. System.out.println("Song title: "+songName);
  572. Path destinationPath = Paths.get("C:\\Users\\konta\\IdeaProjects\\JavafxMusicPlayer\\src\\sample\\music\\"+file.getName());
  573. System.out.println("Path "+destinationPath);
  574. //try {
  575. DB.insertSQL("INSERT INTO tblSong (fldSongName, fldPath) VALUES ('"+songName+"','"+sourcePath+"')");
  576. //Files.copy(sourcePath, destinationPath);
  577. /**} catch(FileAlreadyExistsException e) {
  578. System.out.println("destination file already exists");
  579. } catch (IOException e) {
  580. System.out.println("something else went wrong");
  581. e.printStackTrace();
  582. }*/
  583. }
  584.  
  585. }
  586.  
  587. @FXML
  588. private void handleAllSongs() {
  589. checkState = false;
  590. pageIndex = 0;
  591. loadsongs();
  592. playlistTextField.setVisible(false);
  593. checkListView.setVisible(false);
  594. buttonCreatePlaylist.setVisible(false);
  595. listOfSongs.setVisible(true);
  596. buttonFileChooser.setVisible(false);
  597.  
  598. }
  599.  
  600. @FXML
  601. private void handleCreatePlaylist() throws IOException {
  602.  
  603. String playlistName = playlistTextField.getText();
  604. System.out.println(playlistName);
  605. LogInController user = new LogInController();
  606. System.out.println(user.getUsername());
  607. DB.insertSQL("INSERT INTO tblPlaylist (fldPlaylistName, fld_Username) VALUES ('"+playlistName+"','"+user.getUsername()+"')");
  608. DB.selectSQL("SELECT fldPlaylistID FROM tblPlaylist WHERE fldPlaylistName = '"+playlistName+"'");
  609. String playlistIDInCreate = DB.getData();
  610. String StopGetData = DB.getData();
  611. //DB.getData();
  612.  
  613. for (String playlist: playListList)
  614. {
  615. for (int i = 0; i < songs.length; i++)
  616. {
  617. if (songs[i].equals(playlist))
  618. {
  619. DB.insertSQL("INSERT INTO tblConnect (fldPlaylistID, fldSongID) VALUES ('"+playlistIDInCreate+"','"+(i+1)+"')");
  620. }
  621. }
  622. }
  623.  
  624. //These are the last ones to run.
  625. //playlistTextField.setVisible(false);
  626. //buttonCreatePlaylist.setVisible(false);
  627. getplaylistID();
  628. loadsongs();
  629. loadPlaylists();
  630. listOfSongs.setVisible(true);
  631. checkListView.setVisible(false);
  632. playlistTextField.setVisible(false);
  633. buttonCreatePlaylist.setVisible(false);
  634.  
  635. }
  636.  
  637. @FXML
  638. private void handleEditPlaylist ()
  639. {
  640. pageIndex = 1;
  641. listOfSongs.setVisible(false);
  642. checkListView.setVisible(true);
  643. playlistTextField.setVisible(true);
  644. buttonSavePlaylistEdits.setVisible(true);
  645. buttonDeletePlaylist.setVisible(true);
  646.  
  647. ObservableList<String> data = FXCollections.observableArrayList(songs);
  648. checkListView.setItems(data);
  649. DB.selectSQL("select fldPlaylistName from tblPlaylist where fldPlaylistID = '"+playlistID +"'");
  650. String name = DB.getData();
  651. String StopGetData = DB.getData();
  652. playlistTextField.setText(name);
  653. }
  654.  
  655. @FXML
  656. private void handleSavePlaylist() throws IOException
  657. {
  658. System.out.println("playlistID:"+playlistID);
  659. DB.deleteSQL("Delete from tblConnect where fldPlaylistID = '"+playlistID+"'");
  660. String playlistName = playlistTextField.getText();
  661. System.out.println(playlistName);
  662.  
  663. DB.updateSQL("UPDATE tblPlaylist SET fldPlaylistName= '"+ playlistName+"' WHERE fldPlaylistID = "+playlistID);
  664.  
  665. getplaylistID();
  666. loadsongs();
  667. loadPlaylists();
  668.  
  669. }
  670.  
  671. @FXML
  672. private void handleDeletePlaylist()
  673. {
  674.  
  675. }
  676.  
  677. }
  678.  
  679. //TODO add a "add music" button so that the user can add music
  680. //TODO remove or out comment all internal sout's
  681. //TODO Add JavaDoc documentation
  682. //TODO Add comments
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement