java文件选择器禁用主工具栏中的功能和选项

java文件选择器禁用主工具栏中的功能和选项,java,swing,jfilechooser,Java,Swing,Jfilechooser,我想禁用顶部工具栏中的一些选项——“主页”、“上一级”、“新建文件夹”。 在我的代码中,只有“新文件夹”起作用,它被禁用。我尝试在所有按钮上使用此方法,但不起作用,代码如下: javax.swing.Action newFolder = fileChooser.getActionMap().get("New Folder"); newFolder.setEnabled(false); javax.swing.Action home = fileChooser.getActionMap().get

我想禁用顶部工具栏中的一些选项——“主页”、“上一级”、“新建文件夹”。 在我的代码中,只有“新文件夹”起作用,它被禁用。我尝试在所有按钮上使用此方法,但不起作用,代码如下:

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);

这是一个基于图标搜索的暴力方式,灵感来源于此

publicstaticvoidmain(最终字符串[]args){
JFileChooser cho=新的JFileChooser();
禁用按钮(cho,“FileChooser.homeFolderIcon”);
禁用按钮(cho,“FileChooser.upFolderIcon”);
禁用按钮(cho,“FileChooser.newFolderIcon”);
cho.showOpenDialog(空);
}
公共静态void disableButton(最终容器c、最终字符串iconString){
int len=c.getComponentCount();
对于(int i=0;i
以下是
JFileChooser
UIManager
图标标识符列表:

FileView.directoryIcon

FileView.fileIcon

FileView.computerIcon

FileView.hardDriveIcon

FileView.floppyDriveIcon

FileChooser.newFolderIcon

FileChooser.upFolderIcon

FileChooser.homeFolderIcon

FileChooser.detailsViewIcon

FileChooser.listViewIcon

请查看以了解不同的方法

它只允许用户浏览指定目录下的目录。“向上一个”按钮被禁用。“主页”按钮将带您返回指定的控制器


您仍然需要显示“新建文件夹”按钮。

您测试了多少外观和感觉?有多少个平台?问题是,这种解决方案往往很快就会崩溃,可能与L&F有关。对于您的actionMap方法,您应该在地图中打印不同的键,在我的例子中,上升一级的键是“上升”。不幸的是,我在地图上看不到任何与“主页”按钮对应的键。@MadProgrammer:我承认我没有在当前平台之外的其他平台上测试过这个,以及默认的L&F。如果我们试图提供的任何答案需要在任何现有平台和任何现有L&F或任何现有
Whateva
上进行彻底测试,则不会建议任何答案……不会有任何答案。@Berger这是我的观点,除了开发您自己的外观和感觉代表外,没有其他“正确”的解释
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);
        }
    }
}