All pastes #926540 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-03-03 19:12 UTC
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)
	{
	}

}