Java 禁用文件选择器中的“新建文件夹”按钮无法正常工作

Java 禁用文件选择器中的“新建文件夹”按钮无法正常工作,java,swing,jfilechooser,Java,Swing,Jfilechooser,我使用以下代码禁用“新建文件夹”按钮: public void disableNewFolderButton( Container c ) { System.out.print("in disable fn"); int len = c.getComponentCount(); for (int i = 0; i < len; i++) { Component comp = c.getComponent(i); if (comp instanceof JButton)

我使用以下代码禁用“新建文件夹”按钮:

 public void disableNewFolderButton( Container c ) {

     System.out.print("in disable fn");
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"))
    {
        System.out.print("in disable fn");
       b.setEnabled(false);
    }
    }
  else if (comp instanceof Container) {
    disableNewFolderButton((Container)comp);
  }
}
 }
但仅当首次显示文件选择器时,“新建文件夹”按钮才被禁用。假设我去某个驱动器,比如说g:,然后按钮再次被启用。如何正确设置它?

1)这有点愚蠢,但您可以在另一个线程中继续禁用它。直到文件选择器不可见。

2) 隐藏按钮有用吗<代码>b.setVisible(假)

这对我有用

    //Create a file chooser
UIManager.put("FileChooser.readOnly", Boolean.TRUE); 
JFileChooser fc = new JFileChooser();
禁用“新建文件夹”操作(这将禁用按钮):


不是最优雅的解决方案,但效果很好。谢谢你,但是这个例子对我来说不起作用,而且“逻辑上”应该这样。关于为什么会这样,你有什么建议吗?@Boro,我在XP上使用JDK6_07。贴出的代码适用于我的金属和窗户LAF。我不知道为什么它对您不起作用,它一定是平台/LAF问题。谢谢您的回答。您完全正确,它是依赖的,在本例中是依赖于JDK的。当我运行6.0_11时一切都很好,但当6.0_25(我当前的JDK)时就不行了。感谢您的输入和解决方案+1。我想知道他们是否会在较新的JDK中解决这个问题。+1这个对我来说很好。尽管我更希望不要让UIManager参与进来。但我找不到更好的。此外,此解决方案还将“新文件夹”隐藏在弹出菜单中。谢谢我想知道如何将此解决方案仅用于一个文件选择器?仅用于一个文件选择器,请调用
UIManager.put(“FileChooser.readOnly”,Boolean.TRUE)创建并显示文件选择器和
UIManager.put(“FileChooser.readOnly”,Boolean.FALSE)之前之后。
    //Create a file chooser
UIManager.put("FileChooser.readOnly", Boolean.TRUE); 
JFileChooser fc = new JFileChooser();
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class FileChooserAction
{
    public static void createAndShowUI()
    {
        JFileChooser chooser = new JFileChooser();

        BasicFileChooserUI ui = (BasicFileChooserUI)chooser.getUI();
        Action folder = ui.getNewFolderAction();
        folder.setEnabled(false);

        chooser.showSaveDialog(null);
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}