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