JFileChooser

SirWayne

Erfahrenes Mitglied
Hallo zusammen,

1.gibt es eine Möglichkeit die oberen Buttons bei deinem JFileChooser zu deaktvieren?
2.Ich habe eine Verzeuchniss vorgeben kann ich irgendwie regeln, dass er dass vorgebene Verzeichniss nicht verlässt bzw. nicht weiter runter geht...
 
Erstmal kannst du sowas ausprobieren:
Java:
fc = new JFileChooser( );
		FileChooserUI ui2 = fc.getUI( );
		if(ui2 instanceof BasicFileChooserUI){
			BasicFileChooserUI basicUI = (BasicFileChooserUI) ui2;
			basicUI.getChangeToParentDirectoryAction( ).setEnabled(false);
			basicUI.getNewFolderAction( ).setEnabled(false);
		}
		
		
		fc.setFileFilter(new FileFilter( ) {

			@Override
			public boolean accept(File file) {
				return !file.isDirectory( );
			}

			@Override
			public String getDescription() {
				return "Files Only";
			}

		});

Wenn das noch nicht reicht hab ich mal die Komponenten eingefärbt und ausgegeben. Damit kann man sie auch einzeln disablen oder anders konfigurieren:

Java:
	for (int i = 0; i < ui2.getAccessibleChildrenCount(fc); i++) {
			Accessible accessibleChild = ui2.getAccessibleChild(fc, i);
			if (accessibleChild instanceof JComponent) {
				System.out.println(accessibleChild);
				
				JComponent accessibleChild2 = (JComponent) accessibleChild;
				accessibleChild2.setBackground(Color.BLUE);
				for(Component c : accessibleChild2.getComponents( )){
					c.setBackground(Color.RED);
					System.out.println("###"+c);
					if(c instanceof JComponent){
						for(Component cc : ((JComponent)c).getComponents( )){
							cc.setBackground(Color.YELLOW);
							System.out.println("######"+cc);
							cc.setEnabled(false);
						}
					}
				}
			}
		}
 
Falls es mit dem Deaktivieren der Buttons nicht geht, könntest Du eine unschöne Variante anwenden:

FileSystemView ist die "Schnittstelle", derer der FileChooser sich bedient. In einer eigenen, davon abgeleiteten Klasse, könntest Du dann ausgewählte nach Deiner Version manipulieren, damit z.B. das Startverzeichnis nicht geändert werden kann. Deinen FileSystemView übergibst Du dann einfach.
Code:
setFileSystemView(FileSystemView fsv)
 
Zurück