1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| public class MediaPlayerPlaylist extends Application {
private final ReadOnlyObjectWrapper<MediaPlayer> player = new ReadOnlyObjectWrapper<>(this, "player");
@Override
public void start(Stage primaryStage) throws Exception {
final List<String> playlist = Arrays.asList(
"C:\\Users\\Public\\Music\\Sample Music\\Kalimba.mp3",
"C:\\Users\\Public\\Music\\Sample Music\\Maid with the Flaxen Hair.mp3",
"C:\\Users\\Public\\Music\\Sample Music\\Sleep Away.mp3");
final ToggleButton playButton = new ToggleButton("Play");
playButton.textProperty().bind(new StringBinding() {
{
bind(playButton.selectedProperty());
}
@Override
public void dispose() {
unbind(playButton.selectedProperty());
super.dispose();
}
@Override
protected String computeValue() {
return playButton.isSelected() ? "Pause" : "Play";
}
});
playButton.selectedProperty().addListener(observable -> {
if (playButton.isSelected()) {
if (player.get() == null) {
switchToMedia(0, playlist);
} else {
player.get().play();
}
} else {
player.get().pause();
}
});
final ProgressBar progressBar = new ProgressBar();
progressBar.setMaxWidth(Double.MAX_VALUE);
progressBar.progressProperty().bind(new DoubleBinding() {
private final ObjectBinding<Duration> currentTime = Bindings.select(player, "currentTime");
private final ObjectBinding<Duration> totalDuration = Bindings.select(player, "totalDuration");
{
bind(currentTime, totalDuration);
}
@Override
public void dispose() {
unbind(currentTime, totalDuration);
currentTime.dispose();
totalDuration.dispose();
super.dispose();
}
@Override
protected double computeValue() {
double result = 0;
final Duration currentTime = this.currentTime.getValue();
final Duration totalDuration = this.totalDuration.getValue();
if (currentTime != null && totalDuration != null) {
result = currentTime.toMillis() / totalDuration.toMillis();
}
return result;
}
});
final BorderPane pane = new BorderPane();
pane.setCenter(playButton);
pane.setBottom(progressBar);
final Scene scene = new Scene(pane, 500, 500);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
private void switchToMedia(final int index, final List<String> playlist) {
final String path = playlist.get(index);
final File file = new File(path);
final Media media = new Media(file.toURI().toString());
final MediaPlayer player = new MediaPlayer(media);
player.setOnEndOfMedia(() -> {
player.setOnEndOfMedia(null);
final int nextIndex = (index + 1) % playlist.size();
switchToMedia(nextIndex, playlist);
});
this.player.set(player);
player.play();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
} |
Partager