JAVAFX Media Player (почти готов, но небольшая ошибка) - PullRequest
0 голосов
/ 24 апреля 2020

Почти сделано с моим медиаплеером в JavaFX. Следуя определенным инструкциям от YouTube. Почему я не могу создать абстрактные методы для ChangeListener? Что мне не хватает? Это видео на YouTube, от которого я следую, он может получить это раскрывающееся предложение для добавления тезисов, но я не делаю.

все остальное работает нормально для я кроме этого. Что мне здесь не хватает? Я не понимаю

  package cst2550cw2;

import java.io.File;
import java.net.URL;
import java.time.Duration;
import java.util.ResourceBundle;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
/*import javax.swing.event.ChangeListener;*/

public class FXMLDocumentController implements Initializable {

    private MediaPlayer mediaplayer;

    @FXML
    private MediaView mediaView;

    private String filePath;

    @FXML
    private Slider slider;

    @FXML
    private Slider seekslider;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("Select a File (*.mp4) ", "*.mp4");
        fileChooser.getExtensionFilters().add(filter);
        File file = fileChooser.showOpenDialog(null);
        filePath = file.toURI().toString();

        if (filePath != null) {
            Media media = new Media(filePath);
            mediaplayer = new MediaPlayer(media);
            mediaView.setMediaPlayer(mediaplayer);
            DoubleProperty width = mediaView.fitWidthProperty();
            DoubleProperty height = mediaView.fitHeightProperty();

            width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width"));
            height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));

            slider.setValue(mediaplayer.getVolume() * 100);
            slider.valueProperty().addListener(new InvalidationListener() {
                @Override
                public void invalidated(Observable observable) {
                    mediaplayer.setVolume(slider.getValue() / 100);
                }
            }
            );
            mediaplayer.currentTimeProperty().addListener(new ChangeListener<Duration>() {
                @Override
                public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
                    //To change body of generated methods, choose Tools | Templates.
                }
            }
            );

            mediaplayer.play();

        }
    }

    @FXML
    private void pauseVideo(ActionEvent event) {
        mediaplayer.pause();
    }

    @FXML
    private void playVideo(ActionEvent event) {
        mediaplayer.play();
        mediaplayer.setRate(1);
    }

    @FXML
    private void stopVideo(ActionEvent event) {
        mediaplayer.stop();
    }

    @FXML
    private void fastVideo(ActionEvent event) {
        mediaplayer.setRate(1.5);
    }

    @FXML
    private void fasterVideo(ActionEvent event) {
        mediaplayer.setRate(3);

    }

    @FXML
    private void slowVideo(ActionEvent event) {
        mediaplayer.setRate(.75);
    }

    @FXML
    private void slowerVideo(ActionEvent event) {
        mediaplayer.setRate(.5);
    }

    @FXML
    private void exitVideo(ActionEvent event) {
        System.exit(0);
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}
...