rendered paste body/*
* CortAudio v0.2
*
*/
import javax.swing.* ;
import java.awt.event.* ;
import javax.swing.event.* ;
import java.awt.* ;
import javax.media.* ;
import java.io.* ;
import javax.swing.table.* ;
import java.util.* ;
public class son extends JFrame implements ControllerListener, ActionListener, MouseListener, ChangeListener, Runnable
{
/*
Creation des variables
*/
// panel principal
JPanel p ;
// interface de lecture
JButton lire ;
JButton pause ;
JButton stopper ;
JButton suivant ;
JButton precedent ;
public static JSlider slider ;
//menu
JMenuBar menu ;
JMenu fichier ;
JMenuItem ouvrir_fichier ;
JMenuItem suppr_fichier ;
JMenuItem ouvrir_playlist ;
JMenuItem sauver_playlist ;
JMenuItem quitter ;
JMenu about ;
JMenuItem propos ;
//tableau
JScrollPane scroll_table ;
JTable liste ;
DefaultTableModel table_modele ;
public static JLabel titre ;
public static JLabel temps ;
//lecteur
public static Player player ;
//autres
String nom_fichier ;
Hashtable liste_fichier ;
double temps_lecture ;
int num_chanson ;
public static int maximum_temps ;
public static Thread thread_slider ;
public static son lecteur ;
public static son thread_son ;
String zero ;
String zero2 ;
/*
Constructeur, laissé vide
*/
public void son()
{
}
/*
Création de l'interface graphique
*/
public void graphique()
{
//instantiation des objets
p = new JPanel() ;
lire = new JButton (new ImageIcon("img/triangle.png")) ;
pause = new JButton (new ImageIcon("img/pause.png")) ;
stopper = new JButton (new ImageIcon("img/stop.png")) ;
suivant = new JButton (new ImageIcon("img/suivant.png")) ;
precedent = new JButton (new ImageIcon("img/precedent.png")) ;
slider = new JSlider () ;
liste = new JTable () ;
liste_fichier = new Hashtable() ;
scroll_table = new JScrollPane (liste) ;
titre = new JLabel("Pas de lecture") ;
temps = new JLabel() ;
table_modele = new DefaultTableModel(){ //tableau
public boolean isCellEditable(int row, int column)
{
return false; // override de la méthode pour rendre le tableau non éditable
}
};
liste.setModel (table_modele) ;
menu = new JMenuBar () ; //menu
fichier = new JMenu ("Fichier") ;
ouvrir_fichier = new JMenuItem ("Ajouter à la playlist") ;
suppr_fichier = new JMenuItem ("Supprimer de la playlist") ;
ouvrir_playlist = new JMenuItem ("Ouvrir une playlist") ;
sauver_playlist = new JMenuItem ("Sauver la playlist") ;
quitter = new JMenuItem ("Quitter") ;
about = new JMenu ("A propos") ;
propos = new JMenuItem ("A propos de CortAudio") ;
/*
listeners
*/
ouvrir_fichier.addActionListener(this) ;
suppr_fichier.addActionListener(this) ;
ouvrir_playlist.addActionListener(this) ;
sauver_playlist.addActionListener(this) ;
quitter.addActionListener(this) ;
propos.addActionListener(this) ;
lire.addActionListener(this) ;
pause.addActionListener(this) ;
stopper.addActionListener(this) ;
precedent.addActionListener(this) ;
suivant.addActionListener(this) ;
liste.addMouseListener (this) ;
slider.addChangeListener (this) ;
/*
colonnes du tableau
*/
table_modele.addColumn("numéro") ;
table_modele.addColumn("Titre") ;
table_modele.addColumn("Artiste") ;
table_modele.addColumn("Album") ;
/*
creation du menu
*/
this.setJMenuBar (menu) ;
menu.add (fichier) ;
fichier.add(ouvrir_fichier) ;
fichier.add(suppr_fichier) ;
fichier.addSeparator() ;
fichier.add(ouvrir_playlist) ;
fichier.add(sauver_playlist) ;
fichier.addSeparator() ;
fichier.add(quitter) ;
menu.add (about) ;
about.add(propos) ;
/*
options & layout
*/
this.setTitle ("CortAudio") ;
Box vertical = Box.createVerticalBox();
Box horizontal = Box.createHorizontalBox();
Box horizontal2 = Box.createHorizontalBox();
horizontal.add (lire) ;
horizontal.add (pause) ;
horizontal.add (stopper) ;
horizontal.add (precedent) ;
horizontal.add (suivant) ;
horizontal.add (slider) ;
horizontal2.add (titre) ;
horizontal2.add (temps) ;
vertical.add (horizontal2) ;
vertical.add (horizontal) ;
vertical.add (scroll_table) ;
liste.setSelectionMode(0) ;
p.setLayout (new BorderLayout()) ;
p.add ("Center", vertical) ;
this.add(p) ;
this.setSize (500, 500) ;
this.setVisible(true) ;
/*
couleur
*/
p.setBackground (Color.lightGray) ;
liste.setGridColor (Color.lightGray) ;
slider.setBackground (Color.lightGray) ;
lire.setBackground (Color.lightGray) ;
pause.setBackground (Color.lightGray) ;
stopper.setBackground (Color.lightGray) ;
precedent.setBackground (Color.lightGray) ;
suivant.setBackground (Color.lightGray) ;
menu.setBackground (Color.lightGray) ;
lire.setBorderPainted(false) ;
pause.setBorderPainted(false) ;
stopper.setBorderPainted(false) ;
precedent.setBorderPainted(false) ;
suivant.setBorderPainted(false) ;
lire.setFocusPainted(false) ;
pause.setFocusPainted(false) ;
stopper.setFocusPainted(false) ;
precedent.setFocusPainted(false) ;
suivant.setFocusPainted(false) ;
}
/*
creation du player et demarrage de la lecture
*/
public void lecture (String nom_fichier)
{
try
{
this.arret() ;
player = Manager.createRealizedPlayer(new MediaLocator("file:"+nom_fichier)) ;
player.addControllerListener(this) ;
player.start() ;
maximum_temps = ((int)player.getDuration().getSeconds()) ;
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
liste.getSelectionModel().addSelectionInterval(num_chanson, num_chanson);
titre.setText (chanson_prem[1]+" ") ;
slider.setMaximum (maximum_temps) ;
slider.setValue (0) ;
if (!thread_slider.isAlive())
{
thread_slider.start() ;
}
}
catch(Exception e)
{
System.out.println (e) ;
}
}
/*
arret du lecteur
*/
public void arret ()
{
if (player !=null)
{
player.stop() ;
}
}
/*
creation de l'objet
*/
public static void main (String[]args)
{
lecteur = new son() ;
lecteur.graphique() ;
thread_son = new son() ;
thread_slider = new Thread (thread_son) ;
}
/*
méthodes des listeners
*/
// listener du player
public void controllerUpdate( ControllerEvent ce )
{
// passage a l'etat réalisé
if(ce instanceof RealizeCompleteEvent)
{
}
//passage à l'état terminé
else if (ce instanceof EndOfMediaEvent)
{
lecteur.arret() ;
temps_lecture = 0 ;
if (num_chanson < (liste_fichier.size() -1)) // verifier on arrive a la fin de la playlist
{
num_chanson++ ;
}
else
{
num_chanson = 0 ;
}
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
lecteur.lecture(chanson_prem[5]) ;
}
}
//listener des boutons et du menu
public void actionPerformed(ActionEvent evt)
{
slider.removeChangeListener (this) ; // pour eviter les sauts dus au slider
Object obj = evt.getSource() ;
if (player != null)
{
// bouton pause
if (obj.equals(pause))
{
temps_lecture = player.getMediaTime().getSeconds() ;
lecteur.arret() ;
}
// bouton lecture
if (obj.equals(lire))
{
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
lecteur.lecture(chanson_prem[5]) ;
player.setMediaTime(new Time (temps_lecture)) ;
}
// bouton stop
if (obj.equals(stopper))
{
temps_lecture = 0 ;
lecteur.arret() ;
}
// bouton precedent
if (obj.equals(precedent))
{
if (num_chanson > 0)// verifier on arrive a la fin de la playlist
{
num_chanson-- ;
}
else
{
num_chanson = liste_fichier.size() -1 ;
}
temps_lecture = 0 ;
lecteur.arret() ;
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
lecteur.lecture(chanson_prem[5]) ;
}
// bouton suivant
if (obj.equals(suivant))
{
if (num_chanson < (liste_fichier.size() -1)) // verifier on arrive a la fin de la playlist
{
num_chanson++ ;
}
else
{
num_chanson = 0 ;
}
temps_lecture = 0 ;
lecteur.arret() ;
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
lecteur.lecture(chanson_prem[5]) ;
}
// menu enlever musique
if (obj.equals(suppr_fichier))
{
liste_fichier.remove(liste.getSelectedRow()) ;
table_modele.removeRow (liste.getSelectedRow()) ;
lecteur.arret() ;
num_chanson = 0 ;
}
}
// menu ouvrir musique
if (obj.equals(ouvrir_fichier))
{
ouvrir ouverture = new ouvrir() ;
if ((nom_fichier = ouverture.ouvrir()) != null)
{
int nb_ligne = table_modele.getRowCount() ;
String[] fichier_open = ouverture.tagger(nom_fichier) ;
liste_fichier.put(nb_ligne, fichier_open) ;
table_modele.addRow (fichier_open) ;
lecteur.arret() ;
lecteur.lecture(nom_fichier) ;
num_chanson = 0 ;
}
}
// menu ouvrir playlist
if (obj.equals(ouvrir_playlist))
{
ouvrir ouverture = new ouvrir() ; //ouvrir fenetre d'ouverture
if ((nom_fichier = ouverture.ouvrir()) != null)
{
for (int i = 0 ; i<table_modele.getRowCount() ; i++) //enlever l'ancienne playlist
{
table_modele.removeRow(0) ;
}
liste_fichier = ouverture.contenu(nom_fichier) ;
for (int i=0 ; i < liste_fichier.size() ; i++) // ajout des titres de la playlist
{
String[] ligne_tmp = ((String[]) liste_fichier.get(i)) ;
table_modele.addRow (ligne_tmp) ;
}
lecteur.arret() ;
String[] chanson_prem = ((String[])liste_fichier.get(0)) ;
lecteur.lecture(chanson_prem[5]) ;
num_chanson = 0 ;
}
}
//menu sauver playlist
if (obj.equals(sauver_playlist))
{
Hashtable sauver_hash = new Hashtable() ;
sauver sauvegarde_playlist = new sauver() ;
for (int i = 0 ; i<liste.getRowCount() ; i++)
{
String[] tg = ((String[])liste_fichier.get(i-1)) ;
//System.out.println (tg[0]) ;
sauver_hash.put (i,(String[])liste_fichier.get(i)) ;
}
sauvegarde_playlist.sauver(sauver_hash) ;
}
// menu quitter
if (obj.equals(quitter))
{
System.exit(0) ;
}
//menu a propos
if (obj.equals(propos))
{
fenetre fenet= new fenetre() ;
fenet.graphique() ;
}
}
//listener du slider
public void stateChanged(ChangeEvent e)
{
slider.removeChangeListener (this) ;
double temps_slider = slider.getValue() ;
player.setMediaTime(new Time (temps_slider)) ;
slider.addChangeListener (this) ;
}
//interface Runnable, pour lancer le thread
public void run ()
{
try
{
if (player != null)
{
zero = "" ;
zero2 = "" ;
slider.setValue (((int)player.getMediaTime().getSeconds())) ;
int minutes = ((int)player.getDuration().getSeconds())/60 ;
int secondes = ((int)player.getDuration().getSeconds()) -minutes*60 ;
int minutes_passe = (((int)slider.getValue()))/60 ;
int secondes_passe = ((int)slider.getValue())- minutes_passe*60 ;
if (secondes < 9)
{
zero = "0" ;
}
if (secondes_passe < 10)
{
zero2 = "0" ;
}
temps.setText (minutes_passe+":"+zero2+secondes_passe+"/"+minutes+":"+zero+secondes) ;
thread_slider.sleep(500) ;
thread_slider.run() ;
}
}
catch (Exception e)
{
System.out.println (e) ;
}
}
//listener de la souris
//bouton cliqué
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
{
num_chanson = liste.rowAtPoint (e.getPoint()) ;
String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ;
lecteur.lecture(chanson_prem[5]) ;
}
}
//autres listeners de la souris, inutiles, mais présent par souci de simplicité pour l'implémentation
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
}