Bonjour à tous.

Je suis en train de coder un programme pour ranger la musique, et l'ajouter à des playlists si besoin.

En tant que consommateur de musique, j'ai toujours un dossier "à ranger" où arrivent toutes les chansons/dossiers de chansons téléchargées. Ce programme aide à les ranger de manière rapide.

J'ai un problème avec les JList. Pour Lister le contenu du dossier à ranger, j'utilise une JList. Chaque fichier/dossier contenu dans le dossier à ranger est inclu dans cette JList, avec la particularité que le premier item de la JList sera toujours un composant spécial permettant de retourner au dossier parent.

Le problème que je rencontre est que lorsque je clique sur ce fameux premier item, le programme ne va non pas retourner au dossier parent comme attendu, mais adopter le comportement de la dernière chanson sélectionnée, si j'en avais sélectionnée une avant. Si ce n'est pas le cas, tout va fonctionner normalement.

Je sais que je ne suis pas clair, mais c'est assez compliqué à expliquer comme ça. Posez toutes les questions qui pourraient rendre mon problème plus compréhensible.

Je vous remercie tous.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
private JComponent getMusicList(String cheminDossierARanger){
 
		File file = new File(cheminDossierARanger);
 
		final File fileFinal = file;
 
		//liste des fichiers contenus dans le dossier
		final File [] mp3List = new File[file.listFiles().length + 1];
		//liste des strings correspondants
		String [] listeNomsMorceaux = new String[file.listFiles().length + 1];
 
		//assignation du contenu du fichier à chacun des fichiers de la liste
		for (int i = 0 ; i < file.listFiles().length ; i++)
		{
			mp3List[i+1] = file.listFiles()[i];
			listeNomsMorceaux[i+1] = file.listFiles()[i].getName();
		}
 
		//si le dossier présentement lu est la racine du dossier à ranger ou un de ses sous-dossiers
		if(cheminDossierARanger.contains(GestionnaireFichier.getConfig(2)))
		{
			mp3List[0] = new File(cheminDossierARanger, "*Dossier Parent*");
			listeNomsMorceaux[0] = "*Dossier Parent*";
		}
		//si le dossier présentement lu n'est pas la racine du dossier à ranger ou un de ses sous-dossiers
		else
		{
			mp3List[0] = new File(cheminDossierARanger, "*Retour au dossier à ranger*");
			listeNomsMorceaux[0] = "*Retour au dossier à ranger*";
		}
JList jListListeFichiers =  new JList(listeNomsMorceaux);
 
 
		jListListeFichiers.addListSelectionListener(new ListSelectionListener(){
 
 
			public void valueChanged(ListSelectionEvent e) {
 
 
				//Si l'utilisateur a sélectionné un dossier
				if(mp3List[e.getLastIndex()].isDirectory())
				{
					//fermer la fenêtre courante
					win.dispose();
 
					//Créer instance de morceau
					File fichier = mp3List[e.getLastIndex()];
					final Morceau morceau = new Morceau(fichier);
 
					//Proposer à l'utilisateur les choix décrits ci-après
					Object[] options = {"1", "2", "3"};
					int n = JOptionPane.showOptionDialog(win, "Que souhaitez-vous faire avec ce dossier?\n\nPour revenir au dossier parent faites echap ou fermez cette fenêtre\n\n1) Explorer le dossier normalement\n2) Ranger le contenu de ce dossier dans un dossier de votre choix puis revoir tous les mp3 de ce dossier un à un\n3) Déplacer ce dossier dans le répertoire de destination à sa racine puis revoir tous les mp3 de ce dossier un à un\n\n",
							"Option du dossier",	JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,	null, options,options[0]);
 
					switch (n)
					{
					//explorer le dossier normalement
					case 0 :
						new GUI(mp3List[e.getLastIndex()].getAbsolutePath());
						break;
 
						//ranger le dossier dans un dossier choisi puis explorer normalement
					case 1 :
						JFileChooser fileChooser = new JFileChooser(GestionnaireFichier.getConfig(4));
						fileChooser.setMultiSelectionEnabled(false);
						fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
 
						int returnVal = fileChooser.showOpenDialog(null);
 
						if(returnVal == JFileChooser.APPROVE_OPTION) {
							morceau.ranger(fileChooser.getSelectedFile().getAbsolutePath());
							new GUI(morceau.getNouveauchemin());
						}
 
						break;
 
						//ranger le dossier à la racine de Ma Musique et explorer normalement
					case 2 :
						morceau.ranger(GestionnaireFichier.getConfig(4));
						morceau.playlister();
 
						break;
 
 
					default :
						//retourner au menu de base
						new GUI(fileFinal.getAbsolutePath());
					break;	
					}
 
				}
				//si l'utilisateur décide de retourner au dossier parent
				else if (mp3List[e.getLastIndex()].getName().compareTo("*Dossier Parent*") == 0)
				{
					win.dispose();
					new GUI(fileFinal.getParent());
				}
				//si l'utilisateur décide de revenir au dossier originel à ranger
				else if (mp3List[e.getLastIndex()].getName().compareTo("*Retour au dossier à ranger*") == 0)
				{
					win.dispose();
					new GUI(GestionnaireFichier.getConfig(2));
				}
 
				//si l'utilisateur n'a pas séléctionné un dossier
				else
				{
 
					if(!e.getValueIsAdjusting()){
						File fichier = mp3List[e.getLastIndex()];
						final Morceau morceau = new Morceau(fichier);
						new Thread(){
							public void run(){
								morceau.jouer();
							}
						}.start();
 
 
 
						Object[] options = {"Ranger dans le dossier...", "Ranger dans le dossier : " + morceau.chopperNomDossier() + " " + GestionnaireFichier.existenceDossier(GestionnaireFichier.getConfig(4) + "\\" + morceau.chopperNomDossier()), "Créer un dossier...", "Ne pas déplacer"};
						int n = JOptionPane.showOptionDialog(win,"Sélectionnez une option",
								"Option",	JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,	null, options,options[0]);
 
						switch (n)
						{
						case 0 : 
							JFileChooser fileChooser = new JFileChooser(GestionnaireFichier.getConfig(4));
							fileChooser.setMultiSelectionEnabled(false);
							fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
 
							int returnVal = fileChooser.showOpenDialog(null);
 
							if(returnVal == JFileChooser.APPROVE_OPTION) {
								morceau.ranger(fileChooser.getSelectedFile().getAbsolutePath());
							}
 
 
							break;
 
						case 1 : 
							morceau.ranger(GestionnaireFichier.getConfig(4) + "\\" + morceau.chopperNomDossier());
							break;
 
						case 2 : 
 
							String nouveauDossier = (String)JOptionPane.showInputDialog(
									win,
									"Choisissez un nom de dossier...",
									"Créer un dossier",
									JOptionPane.QUESTION_MESSAGE,
									null, // c'est ouvert !!!
									null, "");
 
							if ((nouveauDossier != null) && (nouveauDossier.length() > 0))
							{
								morceau.ranger(GestionnaireFichier.getConfig(4) + "\\" + nouveauDossier);
 
							}
 
							break;
 
						default : 
							break;
 
						}
 
						//prélever la liste des playlists dans le dossier indiqué par le fichier de conf
						File[] listePlaylists = new File(GestionnaireFichier.getConfig(6)).listFiles();
 
						String[] listeCheminPlaylists = new String[listePlaylists.length];
						String[] listeCheminPlaylistsTronque = new String[listePlaylists.length];
 
						//en extraire uniquement le nom des playlists, sans les .m3u
						for (int i = 0; i < listePlaylists.length; i++)
						{
							listeCheminPlaylists[i] = listePlaylists[i].getAbsolutePath();
							listeCheminPlaylistsTronque[i] = listePlaylists[i].getAbsolutePath();					
							listeCheminPlaylistsTronque[i] = (listeCheminPlaylistsTronque[i].split("\\\\"))[listeCheminPlaylistsTronque[i].split("\\\\").length-1];
							listeCheminPlaylistsTronque[i] = (listeCheminPlaylistsTronque[i].split("\\."))[0];
						}
 
						while(n >= 0)
						{
							Object[] optionsPlaylists = listeCheminPlaylistsTronque;
							n = JOptionPane.showOptionDialog(win,"Sélectionnez la playlist dans laquelle vous souhaitez ranger le morceau... Si vous avez fini, faites echap ou la croix en haut à droite",
									"Option",	JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,	null, optionsPlaylists,optionsPlaylists[0]);
							switch (n)
							{
							default : 
 
								if(n >= 0)morceau.ajouterPlaylist(listeCheminPlaylists[n]);
 
							break;
 
 
							}
						}
 
					}