package javacodebook.media.player; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.media.*; /** * Ein einfacher Frame, der die Abspielfunktionen des Java Media Frameworks * demonstriert. */ public class MediaPlayer extends JFrame implements ControllerListener { //Der Player javax.media.Player player; //Die Kontrollleiste für den Player Component playerControls = null; //Die Anzeige des Players (nur bei Videos) Component playerView = null; /** * Einen Frame mit einfacher Benutzerführung erstellen und anzeigen. */ public MediaPlayer() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); //Einen Button zum Öffnen von Dateien erstellen JPanel buttonPanel = new JPanel(); getContentPane().add(buttonPanel, BorderLayout.NORTH); JButton openButton = new JButton("Datei öffnen"); buttonPanel.add(openButton); //Einen ActionLister auf den Button legen, der einen FileChooser öffnet openButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFileChooser chooser = new JFileChooser(new File("d:\\win2000\\media")); int status = chooser.showOpenDialog(MediaPlayer.this); if (status == JFileChooser.APPROVE_OPTION) { //ausgewählte Datei ermitteln und abspielen File file = chooser.getSelectedFile(); playFile(file); } } }); } /** Eine Datei abspielen. */ public void playFile(File file) { if(player != null) player.stop(); try { //den Player erzeugen player = Manager.createPlayer(file.toURL()); //Einen Listener für den Player erzeugen player.addControllerListener(this); } catch(Exception e) { e.printStackTrace(System.out); } player.start();//Das abspielen beginnen } /** * Hier werden je nach Art der abzuspielenden Datei eine visuelle Komponente * (für Video-Dateien) und ein Control-Panel mit Steuerungsmöglichkeiten * angezeigt. */ public void controllerUpdate(javax.media.ControllerEvent evt) { //Nur das RealizeCompleteEvent ist hier von Interesse. Es zeigt an, dass //die Medien-Datei vollständig geladen wurde. if (evt instanceof RealizeCompleteEvent) { //Der Player selbst liefert die visuelle Komponente Component vc = player.getVisualComponent(); if (vc != null) { //evtl. vorhandene alte Komponente entfernen if(playerView != null) getContentPane().remove(playerView); //Neue Komponente ins Zentrum des Frames legen getContentPane().add(vc, BorderLayout.CENTER); //Neue Komponente merken, um sie später entfernen zu können, //wenn eine andere Datei geladen wird playerView = vc; } else { //Wenn es keine visuelle Komponente gibt, da eine Audio-Datei //geladen wurde, wird eine evtl. vorhandene entfernt. if(playerView != null) getContentPane().remove(playerView); } Component cpc = player.getControlPanelComponent(); if (cpc != null) { //Altes Control-Panel entfernen, da sonst u.U. die vorherige //Datei abgespielt wird if(playerControls != null) getContentPane().remove(playerControls); //Control-Panel unten anordnen getContentPane().add(cpc, BorderLayout.SOUTH); //Control-Panel merken playerControls = cpc; } else { //Wenn kein Control-Panel vorhanden, das alte entfernen if(playerControls != null) getContentPane().remove(playerControls); } pack();//Frame neu layouten, um Steuerelemente auch anzuzeigen } } public static void main(String[] args) { //Erzeuge einen neuen MediaPlayer und zeige ihn an MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setSize(320, 200); mediaPlayer.pack(); mediaPlayer.show(); } }