Java FXML:在 ListView 中播放选定的歌曲

Java FXML: Play the selected song in a ListView

首先,抱歉我的英语不好,我来自瑞士...

我想要的: 在列表视图中播放选定的歌曲。

问题:无法启动程序,因为一行不行(String ausgewaehltesLied = anzeige.getSelectionModel().getSelectedItem(); // <----- This is not working),不知道为什么。

代码如下:

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)
    {
        //....
    }
}

谁能帮帮我?谢谢

我认为获取当前选择的这段代码应该采用某种方法。现在作为字段将不起作用,因为它认为 private ListView<String> anzeige; 未初始化。你可以试试这个:

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

    @FXML
    private void startButton(ActionEvent event)
    {

//Song zuweisen, indem der ausgewählte eintrag abgespielt wird
    String ausgewaehltesLied = anzeige.getSelectionModel().getSelectedItem();
    Media liedErstellen = new Media(ausgewaehltesLied);
    MediaPlayer liedAbspielen = new MediaPlayer(liedErstellen); 
        if(start.getText().equals("Play"))
        {
            start.setText("Pause");

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

            liedAbspielen.pause();
        }
    }

问题是,所选的歌曲只是歌曲的名称,而不是完整路径。我用路径向它添加一个字符串,现在它可以工作了