<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Do you drink java?



          像寫情書一樣coding

     

    [Swing]在 JFileChooser 中進行文件驗證的小技巧

    我們在做GUI編程的時候經常需要用到JFileChooser組件構造一個文件選取對話框來為用戶提供打開文件、保存文件等操作。

    通常的做法是調用JFileChooser.showXXX()方法顯示文件選取對話框并且選擇一個文件后,點擊Approve 按鈕(默認情況下標有 "Open" 或 "Save")當對話框關閉后使用JFileChooser.getSelectedFile()方法得到選取的文件(或使用JFileChooser.getSelectedFiles()取得選取的文件數組),然后再對被選取的文件有效性進行驗證(例如,文件的文件名是否合法、選取的路徑下是否已有同名文件存在等等),如果驗證不通過,需要再次打開文件選擇對話框進行選取。

    顯然,驗證沒有通過的情況下,文件選取對話框被反復的打開和關閉,影響用戶體驗。

    我現在介紹一個方法,在點擊了文件選取對話框上的Approve 按鈕后,文件選取對話框關閉前對選取的文件進行驗證,如果驗證沒有通過,那么對話框不關閉,直接進行下一次選擇。

    查看JFileChooser的API,可以發現這樣一個方法 public void approveSelection() ,這個方法會在用戶單擊 Approve 按鈕時由 UI 調用此方法。導致使用等于 APPROVE_SELECTION 的命令字符串激發一個操作事件。

    那么,我們現在可以選擇繼承JFileChooser再覆寫這個方法,將對選中文件的有效性驗證寫入這個方法中,只有當驗證通過時才調用超類的approveSelection() 完成文件選取,否則直接返回,繼續選擇新的文件。

    下面是我寫的一個demo以供參考:

    import java.io.File;
    import javax.swing.JOptionPane;

    /**
    ?* 在 JFileChooser 中進行文件驗證的小技巧
    ?* @author Chen Wei
    ?* @email chenwei.mobi@gmail.com
    ?*/
    public class JFileChooserDemo extends javax.swing.JFileChooser{
    ???
    ??? public void approveSelection(){
    ??????? File file = getSelectedFile();
    ???????
    ??????? // 驗證文件名是否合法
    ??????? if (!validateFileName(file.getName())) {
    ??????????? JOptionPane.showMessageDialog(getParent(), "文件名不能包含下列任何字符之一:\n \\ / : * ? \" < > |");
    ??????????? return;
    ??????? }else{
    ??????????? super.approveSelection();
    ??????? }
    ??? }
    ???
    ??? /**
    ???? * 驗證輸入字符串參數是否為有效文件名。
    ???? * @param name 待驗證的文件名字符串。
    ???? * @return 通過驗證,文件名無效返回 false,有效返回 true。
    ???? */
    ??? public static boolean validateFileName(String name) {
    ??????? if (name.indexOf('\\') != -1 || name.indexOf('/') != -1 ||
    ??????????? name.indexOf(':') != -1 || name.indexOf('*') != -1 ||
    ??????????? name.indexOf('?') != -1 || name.indexOf('"') != -1 ||
    ??????????? name.indexOf('<') != -1 || name.indexOf('>') != -1 ||
    ??????????? name.indexOf('|') != -1) {

    ??????????? return false;
    ??????? } else {
    ??????????? return true;
    ??????? }
    ??? }
    ???
    ??? public static void main(String[] args){
    ??????? JFileChooserDemo chooser = new JFileChooserDemo();
    ??????? chooser.showOpenDialog(null);
    ??? }
    }


    程序運行截圖:
    JFileChooserDemo.jpg

    posted on 2006-11-23 14:15 leon 閱讀(5405) 評論(7)  編輯  收藏 所屬分類: JFC

    評論

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2006-11-23 14:41 BeanSoft

    頂!  回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2006-12-09 15:08 renchaoqun@163.com

    你好,看了你的技巧,真得很有幫助,我現在就JFileChooser的小問題想請教一下,就你上面的那個demo中,如果沒有輸入文件的話,你點擊打開按鈕沒有任何反應,現在我想做到以下兩點
    1.在初次打開保存對話框時,就文件名輸入欄中默認一個文件名
    2.還有,如果在文件名輸入欄中什么也不輸入的情況下,我要讓保存或者打開按鈕灰掉,怎么做到呢,就像word中的另存為一樣,謝謝!  回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2006-12-19 10:36 leon

    1、在打開JFileChooser前,先調用setSelectedFile(File file) 方法設置一個文件。
    2、JFileChooser 沒有提供類似功能的API,但是有一種變通的做法。可以自己包裝一個組件,這個組件是一個JDialog,然后它上面放一個 JFileChooser 和2個JButton,2個JButton分別為保存和取消。初始化時通過設置JFileChooser.setControlButtonsAreShown(boolean b)方法隱藏JFileChooser自己的保存和取消按鈕,然后注冊PropertyChangeListener監聽JFileChooser中的屬性改變事件更新自定義的保存和取消按鈕狀態。不過這個方法不能監聽文件名輸入欄,因為文件名輸入欄內容改變我們無法監聽JFileChooser的屬性改變事件,JFileChooser也沒有提供API給文件名輸入欄添加監聽器。  回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧[未登錄] 2007-03-21 10:49 allen

    這種情況怎么辦?

    使用JFileChooser時如何對Dialog中輸入的filename進行限制?


    比如輸入a/7b,得到的filename是"7b",把"a/"作為路徑的一部分了而后的7b才作為filename

    因此怎么限制用戶輸入?如何得到在dialog中輸入的完整的filename?

    新手求教,謝謝
      回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2009-04-29 08:53 iSnail

    這種情況怎么辦?

    使用JFileChooser時如何對Dialog中輸入的filename進行限制?


    比如輸入a/7b,得到的filename是"7b",把"a/"作為路徑的一部分了而后的7b才作為filename

    因此怎么限制用戶輸入?如何得到在dialog中輸入的完整的filename?

    如上所述,用戶輸入// 或者\\,從組件獲得文件名就已經是過濾后的,根本不包含左斜杠或者右斜杠。需要怎么處理  回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2009-05-28 10:51 gousheng12345

    樓主,你這個程序不管用呀  回復  更多評論   

    # re: [Swing]在 JFileChooser 中進行文件驗證的小技巧 2012-08-03 18:20 ngh

    輸入*還是會有問題  回復  更多評論   

    導航

    統計

    公告

    DSC_0106.jpg
    本博客已經搬家到CSDN
    http://blog.csdn.net/chenweionline




    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    About Technology

    My Favorite Website

    搜索

    積分與排名

    最新評論

    • 1.?re: 胃痙攣
    • 兄弟們你們都做胃鏡了嗎開的啥藥?有什么養胃秘方啊?請賜教啊!
    • --我也進來了
    • 2.?re: 胃痙攣
    • @痛啊
      我感覺比生孩子還疼,生孩子還能有意識呢!這種疼還叫不出來連說話的力氣都沒了
    • --我也進來了
    • 3.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --我也進來了
    • 4.?re: 胃痙攣
    • 我都周期性的發作,算來有4年了 。每年最少一次,一次最少2天。吃了好多藥就差沒去做胃鏡了。 剛剛發作就隨便煮了點姜湯喝下就好了些,不知道還會不會發作了。
    • --許家洛
    • 5.?re: 胃痙攣
    • 我昨晚也疼的要死。。上次疼的直接120送醫院了,一上120我竟然就不疼了,醫院里掉了瓶鹽水就放回家了。這次正好國外旅游中,幾乎疼了一整晚,整個在床上翻滾狀態了。今天不疼了,就是整個人難受。。。求助阿
    • --胃疼
    • 6.?re: [Swing]在 JFileChooser 中進行文件驗證的小技巧
    • 輸入*還是會有問題
    • --ngh
    • 7.?re: 胃痙攣[未登錄]
    • 昨晚一夜的身不如死的感覺,胃痙攣兄不要來了吧 ,求你了
    • --李飛
    • 8.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --daidai
    • 9.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --痛啊
    • 10.?re: 胃痙攣
    • 媽啊 痛的快死了~!第一次感覺過這樣的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
    • --痛啊

    閱讀排行榜

    主站蜘蛛池模板: 亚洲线精品一区二区三区影音先锋| 中国一级特黄的片子免费| 中文字幕免费高清视频| 亚洲中文字幕在线第六区| WWW免费视频在线观看播放| 亚洲国产综合精品中文字幕| 337p日本欧洲亚洲大胆人人| 好吊妞788免费视频播放| 亚洲综合一区无码精品| 韩国欧洲一级毛片免费| 亚洲日韩精品国产3区| 在线免费观看国产视频| 亚洲成人免费电影| 亚洲欧洲日产v特级毛片| 日韩免费一区二区三区在线| 亚洲香蕉在线观看| 国产成人无码免费视频97 | 中国videos性高清免费| 亚洲精品午夜无码专区| 嫩草影院在线播放www免费观看| 久久精品国产亚洲AV网站| 69式互添免费视频| 亚洲第一成年免费网站| 亚洲综合区小说区激情区| 日本免费在线观看| 亚洲一区二区三区在线观看网站| 日韩免费视频在线观看| 香蕉免费在线视频| 亚洲一区中文字幕在线电影网| 一级黄色片免费观看| 亚洲AV无码日韩AV无码导航 | 中国性猛交xxxxx免费看| 久久精品国产亚洲AV电影| 性感美女视频在线观看免费精品| 国产成人综合亚洲| 久久久久亚洲精品美女| 处破痛哭A√18成年片免费| 亚洲精品黄色视频在线观看免费资源 | 成人免费ā片在线观看| 亚洲成人福利在线| 亚洲日韩在线观看|