我正在尝试制作一个JFileChooser来选择一个文件夹。在这个FileChooser中,我希望用户可以选择创建一个新文件夹,然后选择它。我注意到JFileChooser“保存”对话框默认有一个“新文件夹”按钮,但“打开”对话框中没有类似的按钮。有谁知道如何在“打开”对话框中添加“新文件夹”按钮?
具体来说,我想将按钮添加到使用此代码创建的对话框中:
JFrame frame = new JFrame();
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setFileFilter( new FileFilter(){
@Override
public boolean accept(File f) {
return f.isDirectory();
}
@Override
public String getDescription() {
return "Any folder";
}
});
fc.setDialogType(JFileChooser.OPEN_DIALOG);
frame.getContentPane().add(fc);
frame.pack();
frame.setVisible(true);
答案 0 :(得分:3)
确定。最后,我通过使用“保存”对话框而不是“打开”对话框解决了这个问题。标准保存对话框已经有一个“新文件夹”按钮,但它顶部还有一个“另存为:”面板,我不想要。我的解决方案是使用标准保存对话框,但要隐藏“另存为”面板。
以下是保存对话框的代码:
JFrame frame = new JFrame();
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setFileFilter( new FileFilter(){
@Override
public boolean accept(File f) {
return f.isDirectory();
}
@Override
public String getDescription() {
return "Any folder";
}
});
fc.setDialogType(JFileChooser.SAVE_DIALOG);
fc.setApproveButtonText("Select");
frame.getContentPane().add(fc);
frame.setVisible(true);
此部分找到并隐藏“另存为:”面板:
ArrayList<JPanel> jpanels = new ArrayList<JPanel>();
for(Component c : fc.getComponents()){
if( c instanceof JPanel ){
jpanels.add((JPanel)c);
}
}
jpanels.get(0).getComponent(0).setVisible(false);
frame.pack();
最终结果:
修改的
这个解决方案有一个怪癖,如果用户在当前没有选择目录的情况下按下批准按钮,则会出现这个问题。在这种情况下,选择器返回的目录将对应于用户正在查看的任何目录,并与(隐藏)“另存为:”面板中的文本连接。生成的目录可能是不存在的目录。我用以下代码处理了这个问题。
File dir = fc.getSelectedFile();
if(!dir.exists()){
dir = dir.getParentFile();
}