Guten Tag liebe Java-Gemeinde,
aktuell arbeite ich an einem Musikplayer.
Dieser wurde mir als letzte Aufgabe aufgetragen.
Aktuell hakt es bei mir, beim Deaktivieren der Knöpfe Play/Stop/Mute, solange noch keine Datei abgespielt wurde.
hier ein mal der Quellcode vom FXMLController indem der ganze Logikspaß realisiert werden soll.
Vielleicht hat einer von euch eine dufte Idee
aktuell arbeite ich an einem Musikplayer.
Dieser wurde mir als letzte Aufgabe aufgetragen.
Aktuell hakt es bei mir, beim Deaktivieren der Knöpfe Play/Stop/Mute, solange noch keine Datei abgespielt wurde.
hier ein mal der Quellcode vom FXMLController indem der ganze Logikspaß realisiert werden soll.
Vielleicht hat einer von euch eine dufte Idee
Java:
package de.fernschulen.mediaplayer;
import java.io.File;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ListView;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.image.Image;
public class FXMLController {
//für die Bühne
private Stage meineStage;
//für den Player
private MediaPlayer mediaplayer;
//für die MediaView
@FXML private MediaView mediaview;
//für die ImageView mit dem Symbol
@FXML private ImageView symbol;
//****************************************Aufgabe 2****************************************
//für die ImageView mit den Symbolen start.
@FXML private ImageView symbolStart;
//für die ImageView mit den Symbolen pause.
@FXML private ImageView symbolPause;
//****************************************Aufgabe 2****************************************
//für das Listenfeld
@FXML private ListView<String> liste;
//die Methode setzt die Bühne auf den übergebenen Wert
public void setMeineStage(Stage meineStage) {
this.meineStage = meineStage;
}
//die Methode zum Laden
@FXML protected void ladenKlick(ActionEvent event) {
//eine neue Instanz der Klasse FileChooser erzeugen
FileChooser oeffnenDialog = new FileChooser();
//den Titel für den Dialog setzen
oeffnenDialog.setTitle("Datei öffnen");
//die Filter setzen
oeffnenDialog.getExtensionFilters().add(new ExtensionFilter("Audiodateien", "*.mp3"));
oeffnenDialog.getExtensionFilters().add(new ExtensionFilter("Videodateien", "*.mp4"));
//den Startordner auf den Benutzerordner setzen
oeffnenDialog.setInitialDirectory(new File(System.getProperty("user.home")));
//den Öffnendialog anzeigen und das Ergebnis beschaffen
File datei = oeffnenDialog.showOpenDialog(meineStage);
//wurde eine Datei ausgewählt
if (datei != null)
//dann über eine eigene Methode laden
dateiLaden(datei);
}
//die Methode zum Stoppen
@FXML protected void stoppKlick(ActionEvent event) {
//gibt es überhaupt einen Mediaplayer?
if (mediaplayer != null)
//dann anhalten
mediaplayer.stop();
//****************************************Aufgabe 2****************************************
//das Bild für die Wiedergabe erzeugen und anzeigen
File bilddatei = new File("icons/play.gif");
Image bild = new Image(bilddatei.toURI().toString());
symbolStart.setImage(bild);
//****************************************Aufgabe 2****************************************
}
//die Methode für die Pause
@FXML protected void pauseKlick(ActionEvent event) {
//gibt es überhaupt einen Mediaplayer?
if (mediaplayer != null)
//dann unterbrechen
mediaplayer.pause();
}
//die Methode für die Wiedergabe & Pause
@FXML protected void playKlick(ActionEvent event) {
//****************************************Aufgabe 2****************************************
//gibt es überhaupt einen Mediaplayer?
if (mediaplayer != null) {
//wenn der Mediaplayer pausiert oder gestoppt wurde,
//wird der Mediaplayer auf Wiedergabe gestellt und
//das Bild des Buttons "play" angezeigt.
if (mediaplayer.getStatus() == MediaPlayer.Status.PAUSED ||
mediaplayer.getStatus() == MediaPlayer.Status.STOPPED) {
//dann Datei abspielen
mediaplayer.play();
//das Bild für die Pause erzeugen und anzeigen
File bilddatei = new File("icons/pause.gif");
Image bild = new Image(bilddatei.toURI().toString());
symbolStart.setImage(bild);
}
else
//wenn der Mediaplayer gestartet wurde,
//wird der Mediaplayer auf pausiert und
//das Bild des Buttons "pause" angezeigt.
if (mediaplayer.getStatus() == MediaPlayer.Status.PLAYING) {
//wenn nicht, dann die Datei pausieren
mediaplayer.pause();
//das Bild für die Wiedergabe erzeugen und anzeigen
File bilddatei = new File("icons/play.gif");
Image bild = new Image(bilddatei.toURI().toString());
symbolStart.setImage(bild);
}
}
//****************************************Aufgabe 2****************************************
}
//die Methode für das Ein- und Ausschalten der Lautstärke
@FXML protected void lautsprecherKlick(ActionEvent event) {
String dateiname;
//gibt es überhaupt einen Mediaplayer?
if (mediaplayer != null) {
//ist die Lautstärke 0?
if (mediaplayer.getVolume() == 0) {
//dann auf 100 setzen
mediaplayer.setVolume(100);
//und das "normale" Symbol setzen
dateiname = "icons/mute.gif";
}
else {
//sonst auf 0 setzen
mediaplayer.setVolume(0);
//und das durchgestrichene Symbol setzen
dateiname = "icons/mute_off.gif";
}
//das Bild erzeugen und anzeigen
File bilddatei = new File(dateiname);
Image bild = new Image(bilddatei.toURI().toString());
symbol.setImage(bild);
}
}
//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}
//****************************************Aufgabe 1****************************************
//die Methode lädt eine Datei erneut,
//wenn sie aus der Medialiste ausgewählt wird.
@FXML protected void listeKlick(MouseEvent event) {
//der Eventhandler für die Maus
//eine Maustaste wurde gedrückt
liste.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
//eine Instanz für eine Datei erzeugen
//und den Namen der Datei als Argument übergeben,
//die in der Liste angeklickt wurde.
File angeklickteDatei = new File(liste.getSelectionModel().getSelectedItem());
//wurde eine Datei ausgewählt?
if (angeklickteDatei != null)
dateiLaden(angeklickteDatei);
}
});
}
//****************************************Aufgabe 1****************************************
//die Methode lädt eine Datei
public void dateiLaden(File datei) {
//läuft schon eine Wiedergabe?
if (mediaplayer != null && mediaplayer.getStatus() == MediaPlayer.Status.PLAYING) {
//dann anhalten
mediaplayer.stop();
}
//das Medium, den Mediaplayer und die MediaView erzeugen
try {
Media medium = new Media(datei.toURI().toString());
mediaplayer = new MediaPlayer(medium);
mediaview.setMediaPlayer(mediaplayer);
//die Wiedergabe starten
mediaplayer.play();
//****************************************Aufgabe 1****************************************
//ist die Datei bereits vorhanden?
if (liste.getItems().contains(datei.toString()) == false)
//wenn ja, dann den Pfad in das Listenfeld eintragen.
liste.getItems().add(datei.toString());
//****************************************Aufgabe 1****************************************
//und die Titelleiste anpassen
meineStage.setTitle("JavaFX Multimedia-Player " + datei.toString());
}
catch(Exception ex) {
//den Dialog erzeugen und anzeigen
Alert meinDialog = new Alert(AlertType.INFORMATION, "Beim Laden hat es ein Problem gegeben.\n" + ex.getMessage());
//den Text setzen
meinDialog.setHeaderText("Bitte beachten");
meinDialog.initOwner(meineStage);
//den Dialog anzeigen
meinDialog.showAndWait();
}
}
}