Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用java.awt.FileDialog仅允许用户选择文件夹吗_Java_Macos_Awt_Jfilechooser - Fatal编程技术网

我可以使用java.awt.FileDialog仅允许用户选择文件夹吗

我可以使用java.awt.FileDialog仅允许用户选择文件夹吗,java,macos,awt,jfilechooser,Java,Macos,Awt,Jfilechooser,我尝试使用FileDialog而不是JFileChooser来获得OSX上更自然的行为,特别重要的是Favorites列,其中包含指向共享文件夹的清晰链接,这些文件夹隐藏在使用JFileChooser的/Volumes下 public void actionPerformed(ActionEvent e) { FileDialog chooser = new FileDialog(SongKong.mainWindow.frame); chooser.setFilenameFil

我尝试使用FileDialog而不是JFileChooser来获得OSX上更自然的行为,特别重要的是Favorites列,其中包含指向共享文件夹的清晰链接,这些文件夹隐藏在使用JFileChooser的/Volumes下

public void actionPerformed(ActionEvent e)
{
    FileDialog chooser = new FileDialog(SongKong.mainWindow.frame);
    chooser.setFilenameFilter(new FolderFilter());
    chooser.setMode(FileDialog.LOAD);
    chooser.setVisible(true);
    String folderSelected = chooser.getDirectory();
    File folder = new File(folderSelected) ;
    if(folder.exists() && folder.isDirectory())
    {
        //Do something with selected folder
    }
}

class FolderFilter implements FilenameFilter
{
    public boolean accept(File dir, String name)
    {
        return new File(dir,name).isDirectory();
    }
}
我使用的是Java 7,因此我没有使用Quaqua JFileChooser,因为它已经一年没有更新了,我不确定它是否与Oracles Java 7兼容

但我遇到了一个问题,有没有办法让FileDialog只允许打开一个文件夹而不允许打开一个文件,我设置了一个文件名过滤器,但它似乎没有效果,也没有任何问题

.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
就像JFileChooser一样

public void actionPerformed(ActionEvent e)
{
    FileDialog chooser = new FileDialog(SongKong.mainWindow.frame);
    chooser.setFilenameFilter(new FolderFilter());
    chooser.setMode(FileDialog.LOAD);
    chooser.setVisible(true);
    String folderSelected = chooser.getDirectory();
    File folder = new File(folderSelected) ;
    if(folder.exists() && folder.isDirectory())
    {
        //Do something with selected folder
    }
}

class FolderFilter implements FilenameFilter
{
    public boolean accept(File dir, String name)
    {
        return new File(dir,name).isDirectory();
    }
}

(旁白也在WIndows 7上尝试了该代码,但看起来仍然像Windopws XP dialog,即使它是本机对话框,为什么?

关于您的第一个问题,请查看我评论中的链接

至于第二个问题,我建议归结到它们链接到哪些库,以方便实现功能。仅仅因为操作系统已经更新,并不意味着旧库已经被删除。为了保持与旧版本应用程序的兼容性,这些库通常会维护一段时间


你可以看看(通过这篇文章)

你可以看看@PaulTaylor你有没有试过用设置L&F来查看
JFileChooser
s在OS X上的外观?这可能是另一个选项,如果您没有即时通讯使用系统的外观和感觉,颜色都是Maclike,但打开的对话框只提供对userfolder、my home文件夹和硬盘的访问,但不提供任何收藏夹。谢谢,修复了文件夹问题,然而,我感到失望的是,在OSX上,提供的本机打开对话框与JFileChooser没有太大区别,而且远不如Quaqua文件选择器。不幸的是,xFileDialog没有用,因为主要问题是OSX而不是Windows上的应用程序。我已经将您的答案标记为正确,正如您回答了我的两个问题一样,但不幸的是,我还没有解决我的难题,即没有类似OSX的文件对话框。哎呀,我搞砸了源代码管理,实际上,本机对话框在OSX上看起来很棒,不幸的是apple.awt.fileDialogForDirectories选项被破坏了,但即将在1.7.0_08的最终版本中进行修复。我对此有点好奇,知道吗,我还没有尝试过,但你可能想看看@谢谢,但我对本机OSX对话框很满意,只是在等待bug修复。任何不是专门为OSX开发的东西都不会很好地工作。