Jump to Real's How-to Main page

Disable the JFileChooser's "New folder" button

No easy way to disable the "New Folder" button. You need to iterate the JFileChooser components until the right one and disable it.
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;


public class DemoJFileChooser extends JPanel
   implements ActionListener {
   JButton go;

   JFileChooser chooser;
   String choosertitle;

  public DemoJFileChooser() {
    go = new JButton("Do it");
    go.addActionListener(this);
    add(go);
   }

  public void actionPerformed(ActionEvent e) {
    int result;

    chooser = new JFileChooser();
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle(choosertitle);

    disableNewFolderButton(chooser);

    //
    int rc = chooser.showOpenDialog(this);
    if (rc == JFileChooser.APPROVE_OPTION) {
      System.out.println("getCurrentDirectory(): "
         +  chooser.getCurrentDirectory());
      System.out.println("getSelectedFile() : "
         +  chooser.getSelectedFile());
    }
    else {
      System.out.println("No Selection!");
    }
  }


  public void disableNewFolderButton( Container c ) {
    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("FileChooser.newFolderIcon"))
           b.setEnabled(false);
        }
      else if (comp instanceof Container) {
        disableNewFolderButton((Container)comp);
      }
    }
  }

  public Dimension getPreferredSize(){
    return new Dimension(200, 200);
  }

  public static void main(String s[]) {
    JFrame frame = new JFrame("");
    DemoJFileChooser panel = new DemoJFileChooser();
    frame.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      }
    );
    frame.getContentPane().add(panel,"Center");
    frame.setSize(panel.getPreferredSize());
    frame.setVisible(true);
  }
} 

If you find this article useful, consider making a small donation
to show your support for this Web site and its content.

Written and compiled by Réal Gagnon ©1998-2007
[ home ]