2016-04-27 9 views
-1

JFileChooser - Ich möchte einige Optionen in der oberen Symbolleiste deaktivieren - "Home", "Up One Level", "Neuer Ordner". in meinem Code nur "Neuer Ordner" funktioniert und es ist deaktiviert. Ich habe versucht, diese Methoden auf alle Tasten zu bedienen, aber es funktioniert nicht, hier ist der Code:java fileChooser deaktivieren Funktionen und Optionen in der Hauptwerkzeugleiste

javax.swing.Action newFolder = fileChooser.getActionMap().get("New Folder"); 
newFolder.setEnabled(false); 
javax.swing.Action home = fileChooser.getActionMap().get("Home"); 
home.setEnabled(false); 
javax.swing.Action upOneLevel = fileChooser.getActionMap().get("Up One Level"); 
upOneLevel.setEnabled(false); 

Antwort

2

Hier ist eine Brute-Force-Weg auf das Symbol Suche basiert, von diesem example inspiriert. Hier

public static void main(final String[] args) { 

    JFileChooser cho = new JFileChooser(); 

    disableButton(cho, "FileChooser.homeFolderIcon"); 
    disableButton(cho, "FileChooser.upFolderIcon"); 
    disableButton(cho, "FileChooser.newFolderIcon"); 

    cho.showOpenDialog(null); 

} 

public static void disableButton(final Container c, final String iconString) { 
    int len = c.getComponentCount(); 
    for (int i = 0; i < len; i++) { 
     Component comp = c.getComponent(i); 
     if (comp instanceof JButton) { 
      JButton b = (JButton) comp; 
      Icon icon = b.getIcon(); 
      if (icon != null 
        && icon == UIManager.getIcon(iconString)) { 
       b.setEnabled(false); 
      } 
     } else if (comp instanceof Container) { 
      disableButton((Container) comp, iconString); 
     } 
    } 
} 

ist eine Liste von UIManager Icons Identifikatoren für JFileChooser:

FileView.directoryIcon

FileView.fileIcon

FileView.computerIcon

FileView.hardDriveIcon

FileView.floppyDriveIcon

FileChooser.newFolderIcon

FileChooser.upFolderIcon

FileChooser.homeFolderIcon

FileChooser.detailsViewIcon

FileChooser.listViewIcon

+0

Wie viele sehen und fühlen haben Sie getestet? Wie viele Plattformen? Das Problem ist, dass diese Art von Lösung dazu neigt, schnell auseinander zu fallen – MadProgrammer

+0

Danke, ich habe versucht, Ihren Code, bis eine Ebene und zu Hause arbeiten noch ... –

+1

Vielleicht ist es L & F verwandt. Für Ihren actionMap-Ansatz sollten Sie die verschiedenen Schlüssel in der Karte drucken, in meinem Fall ist der Schlüssel zum Hochgehen einer Ebene "Go Up". Leider sehe ich keinen Schlüssel in der Karte, der der Home-Taste entsprechen würde. – Berger

1

Überprüfen Sie die Single Root File Chooser für einen anderen Ansatz.

Es ermöglicht dem Benutzer nur das Durchsuchen von Verzeichnissen unterhalb des angegebenen Verzeichnisses. Die Schaltfläche "Up One" ist deaktiviert. Die Schaltfläche "Home" bringt Sie zurück zum angegebenen Director.

Sie müssten immer noch die Schaltfläche "Neuer Ordner" anzeigen.

Verwandte Themen