Swing filechooser - nur Netzwerkpfade anzeigen lassen

Status
Nicht offen für weitere Antworten.

egge

Mitglied
Hallo,
ich habe da ein kleines Problem.
Wie kann ich in einem filechooser nur die Netzlaufwerke anzeigen lassen?
Also standardmäßig werden alle vorhanden Laufwerke angezeigt. Die lokalen Laufwerke, sowie CD-Rom oder DVD-Laufwerk sollen nicht in der Auswahl auftauchen.

Hat jemand eine Idee...

Schon mal vielen Dank im Voraus
 

Schandro

Top Contributor
naja, wenn was manuelles reicht:
Du kannst nen FileFilter adden der Files wie "E:\\" nicht akzeptiert...
 

egge

Mitglied
Danke für die schnelle Antwort.

So reicht es leider nicht.
Ich müsste irgendwie raus bekommen, welches Laufwerk ein Netzlaufwerk ist und dieses dann dem filechooser hinzufügen.
Die Laufwerksbuchstaben ändern sich und sind bei jedem Client unterschiedlich.
Hab aber keine Idee wie ich das umsetze.
Es muss doch aber irgendwie gehen. Manche Programme zeigen doch beispielsweise auch nur Wechseldatenträger zur Auswahl an.
 

E.G.O.

Mitglied
ich hab mich damit leider noch nicht beschäftigt, aber vielleicht gibt es irgendwie eine Möglichkeit dies über die IP zu regeln, welches Laufwerk gehört zum Localhost 127.0.0.1
 

Schandro

Top Contributor
Da ich grad kein Netzwerklaufwerk zum testen hab, hier mein Vorschlag:
gucken ob das Ergebniss von
File#toURI().getPort()
gleich -1 ist ?!
 

Ebenius

Top Contributor
File#toURI().getPort()
Das wird so leider nichts. Netzwerkpfade im Windows sind UNC-Pfade. Wenn man sie in eine URI umwandelt kommt da auch nur das raus:
Code:
file://someWindowsHost/some/path/to/file
Da ist kein Port angegeben. Du würdest also nur -1 zurückbekommen; für jedes File.

Ebenius
 

egge

Mitglied
Also ich versuche gerade einen FileFilter zu basteln, aber ich dachte mit dem kann man nur festlegen, ob zum Beispiel .txt usw angezeigt werden sollen.
Weiß jemand wie man damit umgeht?
 

egge

Mitglied
Naja das Erstellen des Filefilter-Objekts klappt soweit, aber wie kann ich damit nur die Netzwerkpfade ausfiltern lassen?
 

egge

Mitglied
Java:
FileSystemView view = new FileSystemView() {

            @Override
            public File createNewFolder(File containingDir) throws IOException {
                for (File f : File.listRoots()) {
                    // ???????
                }


                throw new UnsupportedOperationException("Not supported yet.");
            }
        };

        for (File f : File.listRoots()) {
            System.err.println(view.getSystemTypeDescription(f));

        }

        jFileChooser1.setFileSystemView(view);


Also das ist mein Versuch eine eigene FileSystemView zu erstellen.
Nur was kommt anstatt den Fragezeichen in die for-Schleife?
Ich hab keine Ahnung ob das der richtige Ansatz ist...
 

Michael...

Top Contributor
Ich habe mal versucht etwas in Kombination aus FileFilter und FileSystemView zu basteln. Hänge aber noch an der Manipulation von ComboBox und HomeDirectory des FileChoosers.

Java:
import java.io.*;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
import javax.swing.filechooser.FileFilter;

public class FileChooserTest {
	private static JFileChooser fileChooser;
	
	public static void main(String[] args) throws Exception{
		
		fileChooser = new JFileChooser();
		RestrictedFileSystemView fsView = new RestrictedFileSystemView(fileChooser.getFileSystemView());
		
		fileChooser.setFileSystemView(fsView);
		fileChooser.setCurrentDirectory(fsView.getHomeDirectory());
		fileChooser.addChoosableFileFilter(fsView.getFileFilter());
		fileChooser.setAcceptAllFileFilterUsed(false);
		
		fileChooser.showOpenDialog(null);
		System.exit(0);
	}
}

class RestrictedFileSystemView extends FileSystemView {
	private File[] roots;
	
	public RestrictedFileSystemView(FileSystemView fsView) {
		roots = File.listRoots();
		java.util.Vector r = new java.util.Vector();
		
		for (int i=0; i<roots.length; i++) {
			if (fsView.getSystemTypeDescription(roots[i]).equalsIgnoreCase("Netzlaufwerk"))
				r.add(roots[i]);
		}
		roots = new File[r.size()];
		for (int i=0; i<r.size(); i++) {
			roots[i] = (File)r.get(i);
		}
	}
	
	public File createNewFolder(File file) throws IOException {
		return null;
	}
	
	public File getHomeDirectory(){
		return this.roots[0];
	}
	
	public File getDefaultDirectory() {
		return this.roots[0];
	}
	
	public File[] getRoots() {
		return this.roots;
	}
	
	public FileFilter getFileFilter() {
		return new FileFilter() {

			public boolean accept(File file) {
				for (int i=0; i<roots.length; i++) {
					if (file.getAbsolutePath().startsWith(roots[i].toString()))
						return true;
				}
				return false;
			}

			public String getDescription() {
				return "nur Netzwerkzugriff";
			}
		};
	}
}
 

egge

Mitglied
Danke Michael.
Ich habe den Quellcode ausprobiert. Funktioniert echt super.
Ich sehe zwar in der Combobox noch alle Laufwerke, aber sobald ich ein lokales Laufwerk aufwähle, werden darin keine Dateien angezeigt. Das ist echt super.

Vielen, vielen Dank für eure Unterstützung.

Gruß egge
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Wenn das so schon reicht, kannst Du ja den FileFilter aus der FileSystemView-Klasse rauslösen und denn Rest davon wegschmeißen.
 
M

Morl99

Gast
Hallo,

ersteinmal danke für den hier gezeigten Code, das war schon sehr nützlich. Ich weiß, dass der eigentliche TS nun nichts von meiner Hilfe haben wird, da dies nun 1,5 Jahre her ist. Da ich aber durch google auf diesen Thread gestoßen bin geht es anderen vielleicht ähnlich.

Um das Verhalten der ComboBox (im Windows L&F!) auch durch den FileSystemView bestimmen zu lassen muss eine ClientProperty gesetzt werden:
Java:
fc.putClientProperty("FileChooser.useShellFolder", Boolean.FALSE);

Allerdings hat dies bei Instanziierung wie oben gezeigt keine Auswirkung mehr. Es funktioniert, wenn man es folgendermaßen ändert:
Java:
static class RestrictedFileSystemView extends FileSystemView {
		private File[] roots;

		public RestrictedFileSystemView() {
			super();
			FileSystemView fsv = FileSystemView.getFileSystemView();
			roots = File.listRoots();
			java.util.Vector r = new java.util.Vector();

			for (int i = 0; i < roots.length; i++) {
				if (fsv.getSystemTypeDescription(roots[i]).equalsIgnoreCase("Netzlaufwerk")
						|| fsv.getSystemTypeDescription(roots[i]).equalsIgnoreCase("Wechseldatenträger"))
					r.add(roots[i]);
			}
			roots = new File[r.size()];
			for (int i = 0; i < r.size(); i++) {
				roots[i] = (File) r.get(i);
			}
		}

		@Override
		public File createNewFolder(File file) throws IOException {
			return null;
		}

		@Override
		public File getHomeDirectory() {
			return this.roots[0];
		}

		@Override
		public File getDefaultDirectory() {
			return this.roots[0];
		}

		@Override
		public File[] getRoots() {
			return this.roots;
		}

		public FileFilter getFileFilter() {
			return new FileFilter() {
				@Override
				public boolean accept(File file) {
					if (file.isFile()) {
						// nur .pdf Dateien anzeigen
						if (!file.getAbsoluteFile().toString().endsWith(".pdf")) {
							return false;
						}
					}
					for (int i = 0; i < roots.length; i++)
						if (file.getAbsolutePath().startsWith(roots[i].toString()))
							return true;
					}
					return false;
				}

				@Override
				public String getDescription() {
					return "*.pdf";
				}
			};
		}
	}

Den FileChooser dann folgendermaßen erstellen:
Java:
            RestrictedFileSystemView fsView = new RestrictedFileSystemView();

			JFileChooser fc = new JFileChooser(fsView);

			fc.putClientProperty("FileChooser.useShellFolder", Boolean.FALSE);
			fc.setFileSystemView(fsView);
			fc.setCurrentDirectory(fsView.getHomeDirectory());
			fc.addChoosableFileFilter(fsView.getFileFilter());
			fc.setAcceptAllFileFilterUsed(false);

Wobei die Implementierung für meine Bedürfnisse abgeändert habe, dürfte aber klar sein.

Vielleicht nützt es ja jemanden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Fehlermeldungen bei Cancel FileChooser AWT, Swing, JavaFX & SWT 7
Bluedaishi FileChooser.ExtensionFilter AWT, Swing, JavaFX & SWT 4
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
N Swing Filechooser zweifarbig machen AWT, Swing, JavaFX & SWT 33
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B FileChooser anpassen AWT, Swing, JavaFX & SWT 2
D Swing FileChooser mit einem neuen Rootordner AWT, Swing, JavaFX & SWT 6
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
N FileWriter mit FileChooser AWT, Swing, JavaFX & SWT 3
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
kodela FileChooser mit "absolutem" Root-Verzeichnis öffnen AWT, Swing, JavaFX & SWT 2
L Filechooser File Öffnen AWT, Swing, JavaFX & SWT 4
N FileChooser in View AWT, Swing, JavaFX & SWT 3
H FileChooser und Filter AWT, Swing, JavaFX & SWT 4
F Problem mit Mehrfachauswahl bei Filechooser AWT, Swing, JavaFX & SWT 2
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
G FileChooser Bild Speichern AWT, Swing, JavaFX & SWT 3
G FileChooser AWT, Swing, JavaFX & SWT 5
R filechooser soll sich das Verzeichnis merken AWT, Swing, JavaFX & SWT 2
K Bilddatei mit Filechooser auswählen und anzeigen/impotieren AWT, Swing, JavaFX & SWT 18
G FileChooser - Größe (Dimension) ändern AWT, Swing, JavaFX & SWT 2
V System Look and Feel, FileChooser, Optionen einer jar-Datei AWT, Swing, JavaFX & SWT 10
M bei filechooser.showSaveDialog(null); auf Datein. zugreifen AWT, Swing, JavaFX & SWT 2
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
D FileChooser der anderen Art. AWT, Swing, JavaFX & SWT 2
C falsche Pfadangabe bei FileChooser AWT, Swing, JavaFX & SWT 7
W Vorschau mit FileChooser: Ereignis bei Datei ausgewählt? AWT, Swing, JavaFX & SWT 4
H FileChooser AWT, Swing, JavaFX & SWT 5
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
Lukas2904 Swing ID von WLAN Kamera anzeigen lassen. AWT, Swing, JavaFX & SWT 2
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
C JavaFX Veränderungen in Scenebuilder in Eclipse als Quellcode anzeigen lassen AWT, Swing, JavaFX & SWT 11
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
B ArrayList, Strings anzeigen AWT, Swing, JavaFX & SWT 1
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
E Aktuelle Uhrzeit auf jeder Stage anzeigen lassen (JavaFX) AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
M Loading Screen anzeigen bei Black Screen AWT, Swing, JavaFX & SWT 1
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Dynamischer Graph zum anzeigen Perfomance Daten AWT, Swing, JavaFX & SWT 35
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
J CheckComboBox selected Items nicht anzeigen AWT, Swing, JavaFX & SWT 6
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
J Slider Wert anzeigen AWT, Swing, JavaFX & SWT 15
D MySQL-Tabellen in GUI anzeigen AWT, Swing, JavaFX & SWT 8
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
M PDF einlesen und innerhalb Pane anzeigen AWT, Swing, JavaFX & SWT 5
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
MiMa PDF in Java FX anzeigen AWT, Swing, JavaFX & SWT 21
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
F JavaFX JavaFX HTMLEditor-Eingabe in Textarea als HTML anzeigen AWT, Swing, JavaFX & SWT 2
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben