0

JFileChooserで問題が発生し、回避策があるかどうかを確認したいと思いました。

JFileChooserが作成され、setFileSelectionModeがFILES_AND_DIRECTORIESの場合、ユーザーがデスクトップやマイドキュメントなどの左側のショートカットボタン(XPの場合)をクリックするか、デスクトップにドロップダウンすると、フィールドはファイル名JTextPaneに配置されません。また、[選択/承認]ボタンをクリックしても、何も起こりません(isDirectorySelected()が何らかの理由でfalseを返すため)。

BasicFileChooserのイベントハンドラー関数がapproveSeletionを呼び出さないため、approveSeletionのオーバーライドは機能しません。

デスクトップに手動で移動せずに、左側のショートカットをクリックしてデスクトップを選択できるようにするにはどうすればよいですか?

ありがとう

4

2 に答える 2

2

BasicFileChooserUI で次のコードが見つかりました。

if (fc.getFileSelectionMode() == JFileChooser.FILES_AND_DIRECTORIES 
&&  fc.getFileSystemView().isFileSystem(dir)) {
    setFileName(dir.getAbsolutePath());
}

そのため、「特別なフォルダー」は意図的に無視されているようです。コードはプライベート メソッドであるため、独自の UI を作成するのは困難です。

ハックとして、PropertyChangeListener をファイルチューザーに追加できる場合があります。

public void propertyChange(final PropertyChangeEvent e)
{
    String prop = e.getPropertyName();

    if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop))
    {
        JFileChooser fileChooser = (JFileChooser)e.getSource();
        File currentDirectory = (File)e.getNewValue();

        String directory = currentDirectory.toString();

        if (directory.endsWith("Desktop")
        ||  directory.endsWith("My Documents"))
        {
            File selectedFile = fileChooser.getSelectedFile();

            if (selectedFile == null || ! selectedFile.equals(currentDirectory))
            {
                fileChooser.removePropertyChangeListener( this );
                fileChooser.setSelectedFile( currentDirectory );
                fileChooser.addPropertyChangeListener( this );
            }
        }
    }
}
于 2010-12-14T01:23:38.717 に答える
2

Windows では、デスクトップはファイル システム内のどのファイルにも支えられていません。これはシェルの名前空間です。つまり、JFileChooser から返されるものは何もありませ。はい、ユーザーのデスクトップを含むフォルダーがあることは知っていますが、デスクトップは実際には、ユーザーのデスクトップと All Users デスクトップ フォルダーの複合体として表示されることに注意してください。任意のフォルダー (ごみ箱など) の。したがって、「デスクトップ」を表す File オブジェクトを返すことは、ほとんど初心者向けではありません。

長短: なぜこれを行う必要があるのか​​を自問してください。おそらく、名前空間 PIDL やあらゆる種類の面倒なことに対処して、ネイティブ コードの領域に深く入り込むことになる可能性があります。私には、なぜ M$ がこのようなものを非常に使いにくくしなければならなかったのか理解できません)...

以下は Windows シェルの名前空間の概要です。

http://msdn.microsoft.com/en-us/library/cc144090%28v=vs.85%29.aspx

于 2010-12-14T04:23:57.253 に答える