1

notepad.exe保存モードのように、または保存モードで動作するJFileChooserが必要mspaint.exeです。[ファイル名]フィールドにワイルドカード(*または?)文字を入力すると、ファイルビューには、ユーザー入力に一致するファイルのみが表示されます。これは問題ありませんが、私の問題はコンボボックスタイプのファイルにあります。

In JFileChooser:ユーザーが[ファイル名]フィールドにワイルドカードを入力すると、 [ファイルの種類]コンボボックスも更新されます。こちらのスクリーンショットをご覧ください!

ただし、これを試してみるとnotepad.exe[ファイル名]フィールドが以前の状態のままであるため、検索パターンが更新されないことがわかります。ここでメモ帳のスクリーンショットを参照してください!

だから私の質問は:コンボボックスタイプのファイルが入力されたフィルターによって更新されるべきではないことを達成する方法を誰かが知っていますか?

クロスプラットフォームソリューションが必要なので、XPとLinuxの両方で機能するはずです。

前もって感謝します!

リンクは申し訳ありませんが、直接添付することはできません。

4

2 に答える 2

1

グロブパターン認識機能は、各ルックアンドフィールのデリゲートに実装されていますFileChooserUI。たとえば、を呼び出す、から継承MetalFileChooserUIされたネストされた、が含まれます。これにより、リスニングに、を介して新しいパターンが追加されます。追加されたフィルターをチェーンのどこかでインターセプトできる場合があります。ApproveSelectionActionBasicFileChooserUIsetFileFilter()PropertyChangeEventMetalFileChooserUI.FilterComboBoxModel

また、Java 7で導入され、ここで説明されているファイルパターンマッチング機能を利用できる場合もあります。

于 2012-09-13T00:14:24.350 に答える
1

最後に、解決策を見つけました。から派生したカスタムファイルチューザーUIを使用するBasicFileChooserUIと、次の方法で問題が解決します。getApproveSelectionAction()カスタムアクションでメソッドをオーバーライドしました。

protected class CustomApproveSelectionAction extends BasicFileChooserUI.ApproveSelectionAction {

    @Override
    public void actionPerformed(ActionEvent e) {
        String filename = getFileName();
        // using a custom pattern to accept valid charachters only:
        Matcher matcher = pattern.matcher(filename);

        if (matcher.matches()) { 
            // this is the good case, just let the super implementation do what have to do.
            super.actionPerformed(e);
        } else {
            // this is the bad case, we must warn the user and don't let the super implementation take effect.
            // display an error message similar like notepad does it.
        }
    }
}

ファイル名に問題がない場合は、スーパー実装の機能を許可します。それ以外の場合は、メッセージを表示します。

于 2015-02-27T08:18:43.873 に答える