2012-09-12 54 views
1

我需要一個類似notepad.exemspaint.exe的保存模式的JFileChooser。正如您在文件名字段中鍵入通配符(*或?)字符時所看到的那樣,文件視圖將只顯示與用戶輸入匹配的文件。這是確定的,但我的問題是與文件類型組合框:有可能不在JFileChooser的文件類型組合框中添加類型通配符?

JFileChooser:類型組合框的文件被更新時,用戶輸入的文件名場通配符也是如此。 查看截圖here

但是,如果您使用notepad.exe來嘗試此操作,您將會意識到文件名字段與以前一樣保持不變,因此搜索模式不會更新。 查看記事本截圖here

所以我的問題是:是否有人知道一個解決方案是如何實現這一類型組合框的文件不應該由輸入的過濾進行更新?

我需要一個跨平臺的解決方案,所以它應該可以在XP和Linux上運行。

在此先感謝!

對不起,我不能直接附上!

回答

1

最後,我已經找到了解決辦法:使用 從BasicFileChooserUI導出自定義文件選擇UI能解決我的問題,以下列方式:我已經重寫了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. 
     } 
    } 
} 

如果文件名是好的,那麼我允許超級實現,否則我會顯示一條消息。

1

glob pattern識別功能是在FileChooserUI代表中實現的每個Look &感覺。例如,MetalFileChooserUI包含從BasicFileChooserUI繼承的嵌套ApproveSelectionAction,它調用setFileFilter()。這通過PropertyChangeEvent將新模式添加到收聽MetalFileChooserUI.FilterComboBoxModel。您可能可以截取沿鏈中某處添加的過濾器。

您也可以利用Java 7中引入的file pattern matching功能,並討論here

+0

根據對問題更仔細的閱讀更新了答案。 – trashgod

+0

此相關的[示例](http://stackoverflow.com/questions/3378798)可用於檢查上述事件的順序。 – trashgod