Search code examples
javalistviewnetbeansmp3fxml

Java FXML: Play the selected song in a ListView


First, sorry for my bad English, I'm from Switzerland...

What I want: To play the selected song in the listview.

Problem: Can't start the program, because one line doesn't work (String ausgewaehltesLied = anzeige.getSelectionModel().getSelectedItem(); // <----- This is not working), I don't know why.

Here's the code:

package mp3player;

import java.io.File;
import java.io.FilenameFilter;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.Slider;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

/**
 *
 * @author cuensal
 */
public class FXMLDocumentController implements Initializable {

    @FXML
    private Button start;
    @FXML
    private Slider lautstaerke;
    @FXML
    private Label songname;
    @FXML
    private Label artistname;
    @FXML
    private Label albumname;
    @FXML
    private Button back;
    @FXML
    private Button forward;    
    @FXML
    private ListView<String> anzeige;


    //zwischenspeicher für die liste, um mp3 dateien einzutragen
    ObservableList<String> dieDaten;

    //holt die dateien im angegebenen Ordner
    File datei = new File("C:/Users/cuensal/Music/Beispiel/");

    //speichert die dateien in diesem array / Filter, um nur mp3 dateien auszulesen
    String[] dateienSammeln = datei.list(new FilenameFilter() {

        public boolean accept(File file, String endung) {
            return endung.endsWith(".mp3");
        }
    });


    //Konventiert die Dateien (String[]) in eine observableArrayList
    public FXMLDocumentController() {
        this.dieDaten = FXCollections.observableArrayList(dateienSammeln);
    }


    @Override //TODO
    public void initialize(URL url, ResourceBundle rb)
    {
        //holt die einträge von der observableArrayList
        anzeige.setItems(dieDaten);
    }

    //Song zuweisen, indem der ausgewählte eintrag abgespielt wird
    String ausgewaehltesLied = anzeige.getSelectionModel().getSelectedItem(); // <----- This is not working

    //TESTSTRING (this works)
    //String lied = "file:///C:/Users/cuensal/Music/Beispiel/Kalimba.mp3";

    Media liedErstellen = new Media(ausgewaehltesLied);
    MediaPlayer liedAbspielen = new MediaPlayer(liedErstellen);


    @FXML
    private void startButton(ActionEvent event)
    {

        if(start.getText().equals("Play"))
        {
            start.setText("Pause");

            liedAbspielen.play();
        }
        else
        {
            start.setText("Play");

            liedAbspielen.pause();
        }
    }

    @FXML
    private void backButton(ActionEvent event)
    {
        //....
    }

    @FXML
    private void forwardButton(ActionEvent event)
    {
        //....
    }
}

can anyone help me? thanks


Solution

  • The problem was, that the selected song was just the name of the song and not the full path. i add a string to it with the path and now it works