Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden.

javaKueken

Mitglied
Ich habe eine JList in der ich Dateien eines Ordners aufliste. Jetzt möchte ich per Mausklick einige Einträge in der JList auswählen und diese (und nur diese) in einen anderen Ordner verschieben. Ich schaffe es momentan per Buttonklick alle aufgelisteten Dateien zu verschieben. Dafür nutze ich diese Methode.

Java:
public void moveViaRename(File dateien, String zielPfad)
	{
		File neu = new File(zielPfad);
		File[] files = dateien.listFiles();

		if (files != null)
		{
			for (int i = 0; i < files.length; i++)
			{
				if (!files[i].isDirectory())
				{
					boolean success = files[i].renameTo(new File(neu, files[i]
							.getName()));
					if (!success)
					{
						System.err.println("Fehler beim Umbennen der Datei: "
								+ files[i].getName());
					}
					System.out.println(files[i].getName());
				}
			}
		}
	}

Dann habe ich auch schon eine Methode mit der ich die Auswahl in der JList auf der Konsole ausgeben kann. Da sehe ich die Pfade. Hier die Methode:

Java:
public void AuswahlVonListe(JList list)
	{
		int[] selectedIx = list.getSelectedIndices();

		// Get all the selected items using the indices
		for (int i = 0; i < selectedIx.length; i++)
		{
			Object sel = list.getModel().getElementAt(selectedIx[i]);
			System.out.println(sel);
		}
	}

Und jetzt will ich wissen wie ich nur die ausgewählten Dateien Verschieben kann, und nicht alle. Könnt ihr mir helfen?
 
du brauchst doch nur die Schleife ab Zeile 8 mit den Indexen, mit den sich daraus ergebenen Strings/ Files/ was auch immer ausführen,
zielPfad muss natürlich irgendwo herkommen,

oder anders gesprochen:
nach Zeile 9 im unteren Code musst du an ein File-Objekt kommen, abhängig davon, was sel nun ist,
dahinter die Codezeilen von Zeile 12 oben, natürlich statt files die hier verwendete neue File-Variable usw.,
etwas denken und mitmachen muss man schon, aber erscheint doch alles ziemlich einfach?
 
du brauchst doch nur die Schleife ab Zeile 8 mit den Indexen, mit den sich daraus ergebenen Strings/ Files/ was auch immer ausführen,
zielPfad muss natürlich irgendwo herkommen,

oder anders gesprochen:
nach Zeile 9 im unteren Code musst du an ein File-Objekt kommen, abhängig davon, was sel nun ist,
dahinter die Codezeilen von Zeile 12 oben, natürlich statt files die hier verwendete neue File-Variable usw.,
etwas denken und mitmachen muss man schon, aber erscheint doch alles ziemlich einfach?


Ich glaub, ich habe deinen Tipp nicht verstanden. Kann auch sein, dass meine Java Kenntnisse einfach zu dürftig sind. Kannst du mir das irgendwie anders erläutern?
zielPfad = ein String (Pfad: D:/.../...)
Irgendwie suche ich sowas wie getFileAt[index] oder so... bin mir aber nicht sicher. Ich verzweifle.
 
wie ich zweifach angesprochen habe wäre es interessant zu wissen was 'sel' ist,
was tust du in dein JList-Model, was ist die Ausgabe, was liefert getClass()?
letzlich doch irgendwie der Pfad, also kannst du mindestens ein neues File-Objekt dort erstellen,
oder welche genauen Fehlermeldungen siehst du auf dich hereinbrechen?

danach wie gesagt analog zu files weiter
 
Was steckt denn in Deiner JList drin File Objekte oder Strings?
Bei ersteren kannst Du einfach casten:
Java:
File file = (File)list.getModel().getElementAt(selectedIx[i]);
Bei zweiterem musst Du aus dem String ein neues File Objekt erstellen.... new File(...

JList bietet auch die Methode getSelectedValues() damit könntest Du direkt über die Selektion iterieren ohne, dass Du zuerst die Indizes liest und über das Model iterierst.
 
Hier wird eine Jlist mit Inhalt gefüllt:

Java:
public void tifDefaultPfadAuflistung()
	{
		listeninhalt = new File(tifDateienPfad);
		File[] dateien = listeninhalt.listFiles();

		listModel = new DefaultListModel();
		for (int i = 0, n = dateien.length; i < n; i++)
		{
			listModel.addElement(dateien[i]);
		}

		dateienliste = new JList(listModel);
		dateienliste.setBackground(new Color(240, 255, 240));
		scrollPaneOben.setViewportView(dateienliste);
	}

über den folgenden Code-Schnipsel rufe ich meine genannte Methode auf und übergebe JList dateienliste

Java:
MeineMethoden indexAuswahl = new MeineMethoden();
				indexAuswahl.AuswahlVonListe(dateienliste);

Das ist die Methode, die ihr schon kennt:

Java:
public void AuswahlVonListe(JList list)
	{
		int[] selectedIx = list.getSelectedIndices();

		// Get all the selected items using the indices
		for (int i = 0; i < selectedIx.length; i++)
		{
			Object sel = list.getModel().getElementAt(selectedIx[i]);
			System.out.println(sel);
		}
	}

Das nur so als Info. Jetzt werde ich mir nochmal eure Antworten anschauen und versuchen zu analysieren. Solltet ihr aber noch irgendetwas für mich haben, dann immer her damit. Ich bin über alle Tipps dankbar.
 
File f = (File) sel;

Ok. Wenn ihr mich jetzt sehen könntet... Ich steh total auf der Leitung ... ich würd´ aj gerne einen Code als Lösung für diesen Tread posten, aber ich befürchte, dass ich mit der Info File f = (File) sel; nichts anfangen kann. Ich weiss nicht wo , an welcher Stelle ich es einfügen soll usw. Ich glaube ich ein Problem die indices, for-Schleifen und Files unter einen Hut zu bekommen.
Verdammt... und ich dachte, dass ich das heute noch irgendwie hinkriege. Ich seh´ schon.... ich werde den ganzen Tag damit verbringen auf die Lösung zu kommen.
 
es gibt in deinem geposteten Code nur eine Stelle wo 'sel' überhaupt vorhanden ist,
an der gibst du dieses File aus, ich zeige dir wie du ein File-Objekt bekommst,
danach musst du an dieser Stelle z.B. das renameTo() ausführen,

das sind leichte Aktionen, zumindest der Überblick, wirklich in Ruhe drüber nachdenken
 
Ok. Wenn ihr mich jetzt sehen könntet... Ich steh total auf der Leitung ... ich würd´ aj gerne einen Code als Lösung für diesen Tread posten, aber ich befürchte, dass ich mit der Info File f = (File) sel; nichts anfangen kann. Ich weiss nicht wo , an welcher Stelle ich es einfügen soll usw. Ich glaube ich ein Problem die indices, for-Schleifen und Files unter einen Hut zu bekommen.
Verdammt... und ich dachte, dass ich das heute noch irgendwie hinkriege. Ich seh´ schon.... ich werde den ganzen Tag damit verbringen auf die Lösung zu kommen.
Eventuell fällt Dir ja eine Gemeinsamkeit zu folgendem auf:
Bei ersteren kannst Du einfach casten:
Java:
File file = (File)list.getModel().getElementAt(selectedIx[i]);
 
Woah!
Ich denke... ich bin da auf ´nem guten Weg.
Java:
public void testVerschieben(JList list, String zielPfad)
	{
		int[] selectedIx = list.getSelectedIndices();

		for (int i = 0; i < selectedIx.length; i++)
		{
			File file = (File)list.getModel().getElementAt(selectedIx[i]);
			System.out.println(file);
			
			File neu = new File(zielPfad);
			file.renameTo(new File(neu, file.getName()));

		}
Jetzt werde ich das etwas bearbeiten und auf meine Bedürfnisse anpassen. Ich hoffe, dass ich euch weiterhin belästigen kann.
 

Zurück
Oben