From 853e489e4c1b102447a6b0f8a1a5f15e0f5a0116 Mon Sep 17 00:00:00 2001 From: Arefe Date: Thu, 28 May 2026 00:00:28 +0330 Subject: [PATCH] complete playlist --- .idea/misc.xml | 2 +- .idea/vcs.xml | 6 ++ pom.xml | 18 ++++- .../java/sbu/javafx/PlaylistController.java | 67 +++++++++++++++++++ src/main/resources/sbu/javafx/playlist.fxml | 14 ++++ 5 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/sbu/javafx/PlaylistController.java create mode 100644 src/main/resources/sbu/javafx/playlist.fxml diff --git a/.idea/misc.xml b/.idea/misc.xml index 001e756..0c04b52 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index eba2d41..0a1a46c 100644 --- a/pom.xml +++ b/pom.xml @@ -17,12 +17,26 @@ org.openjfx javafx-controls - 17.0.6 + 21 org.openjfx javafx-fxml - 17.0.6 + 21 + + + + + org.openjfx + javafx-media + 21 + + + + + de.codecentric.centerdevice + javafxsvg + 1.3.0 diff --git a/src/main/java/sbu/javafx/PlaylistController.java b/src/main/java/sbu/javafx/PlaylistController.java new file mode 100644 index 0000000..6c58e56 --- /dev/null +++ b/src/main/java/sbu/javafx/PlaylistController.java @@ -0,0 +1,67 @@ +package sbu.javafx; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.control.Button; +import javafx.scene.control.Label; + + + +import java.util.ArrayList; +import java.util.List; + +public class PlaylistController { + + @FXML + private VBox songContainer; + + private ArrayList playlist; + private MusicController musicController; + + public void setPlaylist(List playlist, MusicController musicController) + { + this.playlist = new ArrayList<> (playlist); + this.musicController = musicController; + buildRows(); + } + + public void buildRows() + { + songContainer.getChildren().clear(); + + for (Song s : playlist) + { + HBox hbox = new HBox(20); //spacing = 20 + hbox.setAlignment(javafx.geometry.Pos.CENTER); + Label nameLabel = new Label(s.getDisplayName()); + nameLabel.setPrefWidth(250); + + Label durationLabel = new Label(s.getDuration()); + + Button playBtn = new Button("Play"); + playBtn.setPrefWidth(80); + + playBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + if (musicController != null) { + musicController.playSong(s); + } + } + }); + + hbox.getChildren().addAll(nameLabel, durationLabel, playBtn); + songContainer.getChildren().add(hbox); + } + + if (playlist.isEmpty()) { + Label emptyLabel = new Label("Playlist is empty. Add some songs from the main page."); + emptyLabel.setStyle("-fx-text-fill: gray;"); + songContainer.getChildren().add(emptyLabel); + } + + } +} diff --git a/src/main/resources/sbu/javafx/playlist.fxml b/src/main/resources/sbu/javafx/playlist.fxml new file mode 100644 index 0000000..b9552dd --- /dev/null +++ b/src/main/resources/sbu/javafx/playlist.fxml @@ -0,0 +1,14 @@ + + + + + + +