Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecteur mp3

Conseils et démarche

16 août 2022 à 9:46:47

Coucou, alors voilà, j'essaie de progresser en Java et en Orienté Objet.
J'ai fait un petit prototype pour un mini lecteur mp3 il y a quelques temps, et je souhaite m'y remettre. Pour l'instant j'ai 2 boutons dans swing pour faire une sélection de lignes (des titres de chansons) dans un .txt. On m'a conseillé pour aller plus loin de regarder les "limplémentation du format M3U qui est le format de référence des playlist MP3" qu'en pensez-vous ?

Merci pour vos conseils, j'ajoute une capture d'écran pour illustrer le projet,
Bonne journée :)
  • Partager sur Facebook
  • Partager sur Twitter
16 août 2022 à 16:00:20

Sur ton screen on ne voit pas comment lancer la lecture, mettre en pause, se déplacer dans le flux...

Left et right ne sont probablement pas les termes les plus adequats, bien souvent on leur preferera previous et next ou plus simplement |<< et >>|

Pour la partie que tu illustres, as tu gere les cas d'erreurs ou limites:

- fichier txt inexistant

- fichier mp3 inexistant

- fichier n'etant pas un mp3

- nom trop long pour la fenetre

- chemins/noms avec caracteres "exotiques" ou espace

-...

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 10:01:19


Oh génial P.X.L je vais essayer d'améliorer l'interface ! à bientôt :)

Edit : premier problème étrange : j'ai essayé de renommer puis de recréer des boutons avec Swing, mais c'est comme si lors de l’exécution, l'ancienne version du programme se charge.

Si vous avez une idée de ce qu'il peut se passer ?

Voici un extrait de code :
btnNext = new JButton("next");
	   display = new JLabel("welcome");
	//   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	//   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);

 J'ai aussi fait le btnNext.addActionListener sur le nouveau bouton, mais le display.setText ne s'est pas mis à jour ?

J'espère ne pas être trop confus, je remarque que le redimensionnement de mon panel ne bouge pas non plus, j'ai essayé de passer de 600x400 à 600x300 et cela ne semble pas être pris en compte lors de la nouvelle compilation,

Merci encore

-
Edité par ElieL. 17 août 2022 à 13:08:41

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 14:33:50

Je ne connais pas bien Swing, je suis plutot JavaFX (que je recommande sachant que Swing tombe en desuetude) et le code extrait est trop incomplet pour en tirer des conclusions.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 16:11:29

Merci pour ta réponse, je ne connais que Swing, voici le code plus complet :

Une class pour le player avec l'UI :

package fr.pack.omn;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Lecteur implements ActionListener{
	protected int j = 0;
	protected JLabel display;
	protected JPanel p;	
	protected JButton btnL;
	protected JButton btnR;
	protected JButton btnPrevious;
	protected JButton btnNext;
   
   public JPanel getPanel(ArrayList <String> mySongs) {
	   JPanel p = new JPanel(new BorderLayout());
	   btnL = new JButton("aaaaaaaaaa");
	   btnR = new JButton("aaaaaaaaaa");
	   btnPrevious = new JButton("previous");
	   btnNext = new JButton("next");
	   display = new JLabel("welcome");
	//   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	//   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);
	   display.setText(mySongs.get(0 + j));
	   p.add(display, BorderLayout.CENTER);
	//   playerWin.getContentPane().add(panel);
	   btnPrevious.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPrevious) {
					if (j == 0) {
						j = mySongs.size() - 1;
					} else {
						j--;
					}				
					display.setText(mySongs.get(0 + j));
				}		
			} 
	   }); 
	   btnNext.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnNext) {
					if (j == mySongs.size() - 1) {
						j = 0;
					} else {
						j++;
					}					
					display.setText(mySongs.get(0 + j));
				}			
			} 
	   });
	   return p;
   }

@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
}
		
}

Une classe de lecteur mp3 :

package fr.pack.omn;

import javax.swing.JFrame;

public class PlayerWindow extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public PlayerWindow() {
        setTitle("player prototype");
        setSize(600, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }	
}

Un Main pour l'executer :

package fr.pack.omn;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JPanel;

public class Main {
	//java fr/pack/omn/Main C:/Users/x55v/Documents/PersonalCode/songs.txt
	public static ArrayList <String> mySongs = new ArrayList<String>();
	static Object mp3 = new Lecteur();
	
	public static void main(String[] args) {
		
		PlayerWindow playerWin = new PlayerWindow();		 
		File f = new File(args[0]);
        try (Scanner input = new Scanner(f)) {
        	while(input.hasNextLine()) {
	            String i = input.nextLine();
	            System.out.println(i);
	            mySongs.add(i);
        	}
        } catch (FileNotFoundException e) {
            System.err.println("I could not find " + f);       
        }
        
                
//        JPanel panel = new JPanel(new GridLayout(2,2));
        JPanel p = ((Lecteur) mp3).getPanel(mySongs);   
        
        playerWin.getContentPane().add(p);
        playerWin.setVisible(true);
//        JButton btnR = new JButton("Right");
//        panel.add(btnR, BorderLayout.LINE_END);
		
	}

}

Voilà, j'espère pouvoir progresser, j'ai aussi cette info dans la console :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at mp3Player/fr.pack.omn.Main.main(Main.java:17)


En espétant que cela puisse apporter plus d'infos sur mon souci,
à bientôt



-
Edité par ElieL. 17 août 2022 à 16:28:38

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 17:02:03

Oui je vois, mais plutot que te donner la solution, je vais te demander, vu que ton but est de progresser en oriente objet, de nettoyer ce bazar.

On va commencer par une bonne pratique de base, la separation des responsabilites: ton main fait du parsing de fichier, genere une liste de chanson, s'occuper de la vue... c'est trop

Commence par decouper ca en objets avec des responsabilites

1 objet qui va lire le fichier et sortir une liste de chansons

1 objet qui va representer la vue

Donc ta class Main ne devra plus contenir aucun de ces imports, mais seulement tes 2 objets dedies

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JPanel;
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 18:17:07

Merci beaucoup  pour ton aide, j'ai à présent un Main ainsi :

package fr.pack.omn;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JPanel;

public class Main {
	//java fr/pack/omn/Main C:/Users/x55v/Documents/PersonalCode/songs.txt
	public static ArrayList <String> mySongs = new ArrayList<String>();
	static Object ui = new ImportFile();
	static Object mp3 = new Lecteur();
	
	public static void main(String[] args) {    
	}
}

la classe :

package fr.pack.omn;

import javax.swing.JFrame;

public class PlayerWindow extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public PlayerWindow() {
        setTitle("player prototype");
        setSize(600, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }	
}

et la nouvelle classeImportFile.java

package fr.pack.omn;

import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ImportFile {
	PlayerWindow playerWin = new PlayerWindow();
	private String[] args;		 
	File f = new File(args[0]);
    try (Scanner input = new Scanner(f)) {
    	while(input.hasNextLine()) {
            String i = input.nextLine();
            System.out.println(i);
            Container mySongs;
			mySongs.add(i);
    	}
    } catch (FileNotFoundException e) {
        System.err.println("I could not find " + f);       
    }
 }

Certains mots sont surlignés de rouge, mais suis-je sur la bonne voix ?

Edit : j'ai bien sûr toujours même classe Lecteur.java pour faire tourner les chansons,

A+



-
Edité par ElieL. 17 août 2022 à 18:19:28

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 18:45:23

C'est plus propre mais c'est pas encore ca, le principe de separer les responsabilites est de les... separer

Donc exit le PlayerWindow du ImportFile, le flux que tu veux est que ta vue recoive la liste des chansons, donc ton systeme de generation de cette liste(ImportFile) n'a pas besoin de la vue(PlayerWindow)

Au dela de ca, le code doit se trouver dans des fonctions, tu l'as juste colle dans une classe, il te faut donc creer une fonction dans la classe pour le code de lecture de fichier.

  • Partager sur Facebook
  • Partager sur Twitter
18 août 2022 à 13:16:09

Coucou,

j'ai essayé de réorganiser tout,

- j'ai le Main :

package fr.pack.omn;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JPanel;

public class Main {
	//java fr/pack/omn/Main C:/Users/x55v/Documents/PersonalCode/songs.txt
	public static ArrayList <String> mySongs = new ArrayList<String>();
	static Object ui = new ImportFile();
	static Object mp3 = new Lecteur();
	
	public static void main(String[] args) {    
	}
}

- le Player :

package fr.pack.omn;

import javax.swing.JFrame;

public class PlayerWindow extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public PlayerWindow() {
        setTitle("player prototype");
        setSize(600, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }	
}

- Le Lecteur (qui comporte des erreurs)

package fr.pack.omn;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Lecteur implements ActionListener{
	protected int j = 0;
	protected JLabel display;
	protected JPanel p;	
	protected JButton btnL;
	protected JButton btnR;
	protected JButton btnPrevious;
	protected JButton btnNext;
	protected JButton Play;
   
   public JPanel getPanel(ArrayList <String> mySongs) {
	   JPanel p = new JPanel(new BorderLayout());
	   JButton btnPlay = new JButton("Play");
	   btnL = new JButton("<<");
	   btnR = new JButton(">>");
	   btnPrevious = new JButton("previous");
	   btnNext = new JButton("next");
	   display = new JLabel("welcome");
	//   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	//   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);
	   display.setText(mySongs.get(0 + j));
	   p.add(display, BorderLayout.CENTER);
	//   playerWin.getContentPane().add(panel);
	   btnPlay.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPlay) {
					if (j == 0) {								
					display.setText("playing");
					}		
				} 
		   }
	   }); 
	   btnPrevious.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPrevious) {
					if (j == 0) {
						j = mySongs.size() - 1;
					} else {
						j--;
					}				
					display.setText(mySongs.get(0 + j));
				}		
			} 
	   }); 
	   btnNext.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnNext) {
					if (j == mySongs.size() - 1) {
						j = 0;
					} else {
						j++;
					}					
					display.setText(mySongs.get(0 + j));
				}			
			} 
	   });
	   JPanel p = ((Lecteur) mp3).getPanel(mySongs);   
	   
	   playerWin.getContentPane().add(p);
	   playerWin.setVisible(true);	   
	   return p;
   }  
@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
}
		
}

- le ImportFile avec sa méthode

package fr.pack.omn;

import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ImportFile {
	
	public static void imports(String[] args) {
		PlayerWindow playerWin = new PlayerWindow();
		private String[] args;		 
		File f = new File(args[0]);
	    try (Scanner input = new Scanner(f)) {
	    	while(input.hasNextLine()) {
	            String i = input.nextLine();
	            System.out.println(i);
	            Container mySongs;
				mySongs.add(i);
	    	}
	    } catch (FileNotFoundException e) {
	        System.err.println("I could not find " + f);       
	    }
	}
}

 Suis-je sur la bonne voie ? Je n'ai pas osé le tester ;)

A+

-
Edité par ElieL. 18 août 2022 à 13:16:46

  • Partager sur Facebook
  • Partager sur Twitter
18 août 2022 à 15:56:13

Quelques remarques

Tu as toujours le player window dans import file

Pourquoi separer lecteur et player window?

A quoi sert la fonction getPanel?

Pourquoi ton main est vide?

Pourquoi declarer lecteur et import file dans la classe Main en tant que Object ?

Comment comptes tu recuperer la liste des musiques trouvees grace a ImportFile.imports ?

  • Partager sur Facebook
  • Partager sur Twitter
19 août 2022 à 20:16:58

Coucou P.X.L, merci beaucoup pour ces retours constructifs,

J'ai essayé de corriger ma logique :

- enlever le player window dans import file

- unir dans une même classe lecteur et player window

- getPanel() me sert à créer les bouton de l'UI avec swing dans mon esprit

- j'ai vu dans la doc que Main est le point d'entrée de l'application et va invoquer toutes les méthodes utiles, j'ai donc commencé par :

- appeler la fonction qui importe le fichier songs.txt selon le chemin du folder

Voici le Main :

package fr.pack.omn;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JPanel;

public class Main {
	//java fr/pack/omn/Main C:/Users/x55v/Documents/PersonalCode/songs.txt
	public static ArrayList <String> mySongs = new ArrayList<String>();
	static ImportFile = new ImportFile();
	
	public static void main(String[] args) {
		imports("C:/Users/x55v/Documents/PersonalCode/songs.txt");
		//to do
	}
}

le lecteur et le PlayerWindow qui sont réunis dans une même classe :

package fr.pack.omn;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Lecteur implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public PlayerWindow() {
        setTitle("player prototype");
        setSize(600, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
	
	protected int j = 0;
	protected JLabel display;
	protected JPanel p;	
	protected JButton btnL;
	protected JButton btnR;
	protected JButton btnPrevious;
	protected JButton btnNext;
	protected JButton Play;
   
    public JPanel getPanel(ArrayList <String> mySongs) {
	   
	   JPanel p = new JPanel(new BorderLayout());
	   JButton btnPlay = new JButton("Play");
	   btnL = new JButton("<<");
	   btnR = new JButton(">>");
	   btnPrevious = new JButton("previous");
	   btnNext = new JButton("next");
	   display = new JLabel("welcome");
	   //   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	   //   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);
	   display.setText(mySongs.get(0 + j));
	   p.add(display, BorderLayout.CENTER);
	   //   playerWin.getContentPane().add(panel);
       }
    
	   btnPlay.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPlay) {
					if (j == 0) {								
					display.setText("playing");
					}		
				} 
		   }
	   }); 
	   btnPrevious.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPrevious) {
					if (j == 0) {
						j = mySongs.size() - 1;
					} else {
						j--;
					}				
					display.setText(mySongs.get(0 + j));
				}		
			} 
	   }); 
	   btnNext.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnNext) {
					if (j == mySongs.size() - 1) {
						j = 0;
					} else {
						j++;
					}					
					display.setText(mySongs.get(0 + j));
				}			
			} 
	   });
	   JPanel p = ((Lecteur) mp3).getPanel(mySongs);   
	   
	   playerWin.getContentPane().add(p);
	   playerWin.setVisible(true);	   
	   return p;
     
@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
}
		
}

Le ImportFile qui return juste la variable mySongs,

package fr.pack.omn;

import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ImportFile {
	
	public static void imports(String[] args) {
		//PlayerWindow playerWin = new PlayerWindow();
		private String[] args;		 
		File f = new File(args[0]);
	    try (Scanner input = new Scanner(f)) {
	    	while(input.hasNextLine()) {
	            String i = input.nextLine();
	            System.out.println(i);
	            Container mySongs;
				mySongs.add(i);
	    	}
	    	//recuperer la liste des musiques trouvees grace a ImportFile.imports
	    	return mySongs;
	    } catch (FileNotFoundException e) {
	        System.err.println("I could not find " + f);       
	    }
	}
}

Est-ce un peu plus logique ?
Merci encore pour cette aide précieuse,
bonne journée,
Elie

-
Edité par ElieL. 19 août 2022 à 20:18:17

  • Partager sur Facebook
  • Partager sur Twitter
22 août 2022 à 9:52:43

C'est mieux oui encore quelques remarques:

imports ne devrait pas etre static

Si getPanel sert a creer, pourquoi est ce que ca s'appelle getPanel et que ca retourne un jpane?

Main est la classe qui contient un point d'entree, c'est la fonction main qui sera executee une fois la classe chargee, c'est dans cette fonction seulement que doit se placer le déroulement de ton application, même si les bloc static sont initialises avant l'appel a main();

Ta fonction import ne doit pas etre liee a la vue(swing), elle devrait pouvoir fonctionner si l'affichage etait en console, afin d'eviter la dependance entre les deux systemes.

  • Partager sur Facebook
  • Partager sur Twitter
23 août 2022 à 14:56:49

Merci pour ton retour,

j'ai enlevé le static sur le importFile :

package fr.pack.omn;

import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ImportFile {
	
	public void imports(String[] args) {
		//PlayerWindow playerWin = new PlayerWindow();
		private String[] args;		 
		File f = new File(args[0]);
	    try (Scanner input = new Scanner(f)) {
	    	while(input.hasNextLine()) {
	            String i = input.nextLine();
	            System.out.println(i);
	            Container mySongs;
				mySongs.add(i);
	    	}
	    	//recuperer la liste des musiques trouvees grace a ImportFile.imports
	    	return mySongs;
	    } catch (FileNotFoundException e) {
	        System.err.println("I could not find " + f);       
	    }
	}
}

J'ai appelé la mehode getPanel createPanel à la place, et mis en commentaire le return :

package fr.pack.omn;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Lecteur implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public PlayerWindow() {
        setTitle("player prototype");
        setSize(600, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
	
	protected int j = 0;
	protected JLabel display;
	protected JPanel p;	
	protected JButton btnL;
	protected JButton btnR;
	protected JButton btnPrevious;
	protected JButton btnNext;
	protected JButton Play;
   
    public JPanel createPanel(ArrayList <String> mySongs) {
	   
	   JPanel p = new JPanel(new BorderLayout());
	   JButton btnPlay = new JButton("Play");
	   btnL = new JButton("<<");
	   btnR = new JButton(">>");
	   btnPrevious = new JButton("previous");
	   btnNext = new JButton("next");
	   display = new JLabel("welcome");
	   //   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	   //   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);
	   display.setText(mySongs.get(0 + j));
	   p.add(display, BorderLayout.CENTER);
	   //   playerWin.getContentPane().add(panel);
       }
    
	   btnPlay.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPlay) {
					if (j == 0) {								
					display.setText("playing");
					}		
				} 
		   }
	   }); 
	   btnPrevious.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPrevious) {
					if (j == 0) {
						j = mySongs.size() - 1;
					} else {
						j--;
					}				
					display.setText(mySongs.get(0 + j));
				}		
			} 
	   }); 
	   btnNext.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnNext) {
					if (j == mySongs.size() - 1) {
						j = 0;
					} else {
						j++;
					}					
					display.setText(mySongs.get(0 + j));
				}			
			} 
	   });
	   JPanel p = ((Lecteur) mp3).getPanel(mySongs);   
	   
	   playerWin.getContentPane().add(p);
	   playerWin.setVisible(true);	   
	   //return p;
     
@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
}
		
}

Dans le main, je pense appeler la methode createPanel,
puis une methode importFile, j'avoue ne pas être sûr de moi, ton aide est bienvenue,

J'ai aussi 17 erreurs, c'est beaucoup, j'avoue ne pas maîtriser :



bonne journée,
Elie


  • Partager sur Facebook
  • Partager sur Twitter
23 août 2022 à 15:42:42

Il te manque en effet certains concepts de bases si tu ne comprends pas ces erreurs, tu pourras les trouver dans un cours pour debutant, par exemple:

https://www.jmdoudoux.fr/accueil_java.htm qui est tres bien fait.

La partie 1 suffira pour te permettre de résoudre ces erreurs sans soucis.

Y a un peu de boulot a abattre, mais ca te permettra de gagner beaucoup de temps par la suite.

  • Partager sur Facebook
  • Partager sur Twitter
23 août 2022 à 22:18:02

Merci !! Je vais regarder,

à bientôt

Edit j'ai réduit le nombre d'erreur à 4 (cf.capture), j'espère ne rien avoir cassé.
Merci pour la doc fournie, je compte m'y référer régulièrement, c'est vrai que le travail d'assimilation est colossal !


Voici le nouveaux code :

Main : suppression d'imports
Lecteur : suppression d'erreurs

package fr.pack.omn;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Lecteur implements ActionListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected PlayerWindow() extends JFrame {
        setTitle("player prototype");
        setSize(600, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
	
	protected int j = 0;
	protected JLabel display;
	protected JPanel p;	
	protected JButton btnL;
	protected JButton btnR;
	protected JButton btnPrevious;
	protected JButton btnNext;
	protected JButton Play;
   
    public JPanel createPanel(ArrayList <String> mySongs) {
	   
	   JPanel p = new JPanel(new BorderLayout());
	   JButton btnPlay = new JButton("Play");
	   btnL = new JButton("<<");
	   btnR = new JButton(">>");
	   btnPrevious = new JButton("previous");
	   btnNext = new JButton("next");
	   display = new JLabel("welcome");
	   //   panel.add(btnL);
	   p.add(btnPrevious, BorderLayout.LINE_START);	   
	   //   panel.add(btnR);
	   p.add(btnNext, BorderLayout.LINE_END);
	   display.setText(mySongs.get(0 + j));
	   p.add(display, BorderLayout.CENTER);
	   //   playerWin.getContentPane().add(panel);
    
	   btnPlay.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPlay) {
					if (j == 0) {								
					display.setText("playing");
					}		
				} 
		   }
	   }); 
	   btnPrevious.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnPrevious) {
					if (j == 0) {
						j = mySongs.size() - 1;
					} else {
						j--;
					}				
					display.setText(mySongs.get(0 + j));
				}		
			} 
	   }); 
	   btnNext.addActionListener(new ActionListener() {
		   public void actionPerformed(ActionEvent e) {
				if (e.getSource() == btnNext) {
					if (j == mySongs.size() - 1) {
						j = 0;
					} else {
						j++;
					}					
					display.setText(mySongs.get(0 + j));
				}			
			} 
	   });
	   //JPanel p = createPanel(mySongs);   
	   
	   //playerWin.getContentPane().add(p);
	   //playerWin.setVisible(true);	   
	   return p;
}     
@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
}
		
}

ImportFile : suppression d'erreurs

package fr.pack.omn;

import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ImportFile {
	
	public void imports(String[] args) {
		//PlayerWindow playerWin = new PlayerWindow();
		//private String[] args;		 
		File f = new File(args[0]);
	    try (Scanner input = new Scanner(f)) {
	    	while(input.hasNextLine()) {
	            String i = input.nextLine();
	            System.out.println(i);
	            Container mySongs;
				mySongs.add(i);
	    	}
	    	//recuperer la liste des musiques trouvees grace a ImportFile.imports
	    	return mySongs;
	    } catch (FileNotFoundException e) {
	        System.err.println("I could not find " + f);       
	    }
	}
}


Bonne journée, merci pour vos commentaires :)

Edit : j'ai réduit à 2 erreurs !


Mais j'ai du supprimer le return mySongs du ImportFile, ce n'est pas bien je pense, A+ ?

Edit: j'ai pu réduire à une seule erreur après pas mal d'efforts :

Mais je n'arrive pas à modifier les intitulés de boutons, l'interface de swing reste la même malgré mes modifications, votre aide est la bienvenue !

Bonne soirée
Elie

Edit: je continue de documenter mes recherches, voici un autre cours sur le sujet swing :
https://www.youtube.com/watch?v=-UvxwleNA20&list=PLBNheBxhHLQw30CKVBgfD1ateFz43qcU_&index=2&ab_channel=DominiqueLiard

A+

Edit: J'ai fait un autre projet Java, dans celui-ci je peux afficher un message pré-déterminé différent selon le bouton cliqué. Reste à implémenter la fonctionnalité liée au défilement de noms de chansons d'un fichier tiers, pour l'instant je n'ai pas pu le faire, pour récupérer les données d'un utilisateur.
A+

-
Edité par ElieL. 31 août 2022 à 19:33:29

  • Partager sur Facebook
  • Partager sur Twitter