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

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

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

    Do you drink java?



          像寫(xiě)情書(shū)一樣coding

     

    [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧

    我們?cè)谧鯣UI編程的時(shí)候經(jīng)常需要用到JFileChooser組件構(gòu)造一個(gè)文件選取對(duì)話框來(lái)為用戶提供打開(kāi)文件、保存文件等操作。

    通常的做法是調(diào)用JFileChooser.showXXX()方法顯示文件選取對(duì)話框并且選擇一個(gè)文件后,點(diǎn)擊Approve 按鈕(默認(rèn)情況下標(biāo)有 "Open" 或 "Save")當(dāng)對(duì)話框關(guān)閉后使用JFileChooser.getSelectedFile()方法得到選取的文件(或使用JFileChooser.getSelectedFiles()取得選取的文件數(shù)組),然后再對(duì)被選取的文件有效性進(jìn)行驗(yàn)證(例如,文件的文件名是否合法、選取的路徑下是否已有同名文件存在等等),如果驗(yàn)證不通過(guò),需要再次打開(kāi)文件選擇對(duì)話框進(jìn)行選取。

    顯然,驗(yàn)證沒(méi)有通過(guò)的情況下,文件選取對(duì)話框被反復(fù)的打開(kāi)和關(guān)閉,影響用戶體驗(yàn)。

    我現(xiàn)在介紹一個(gè)方法,在點(diǎn)擊了文件選取對(duì)話框上的Approve 按鈕后,文件選取對(duì)話框關(guān)閉前對(duì)選取的文件進(jìn)行驗(yàn)證,如果驗(yàn)證沒(méi)有通過(guò),那么對(duì)話框不關(guān)閉,直接進(jìn)行下一次選擇。

    查看JFileChooser的API,可以發(fā)現(xiàn)這樣一個(gè)方法 public void approveSelection() ,這個(gè)方法會(huì)在用戶單擊 Approve 按鈕時(shí)由 UI 調(diào)用此方法。導(dǎo)致使用等于 APPROVE_SELECTION 的命令字符串激發(fā)一個(gè)操作事件。

    那么,我們現(xiàn)在可以選擇繼承JFileChooser再覆寫(xiě)這個(gè)方法,將對(duì)選中文件的有效性驗(yàn)證寫(xiě)入這個(gè)方法中,只有當(dāng)驗(yàn)證通過(guò)時(shí)才調(diào)用超類的approveSelection() 完成文件選取,否則直接返回,繼續(xù)選擇新的文件。

    下面是我寫(xiě)的一個(gè)demo以供參考:

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

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


    程序運(yùn)行截圖:
    JFileChooserDemo.jpg

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

    評(píng)論

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧 2006-11-23 14:41 BeanSoft

    頂!  回復(fù)  更多評(píng)論   

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

    你好,看了你的技巧,真得很有幫助,我現(xiàn)在就JFileChooser的小問(wèn)題想請(qǐng)教一下,就你上面的那個(gè)demo中,如果沒(méi)有輸入文件的話,你點(diǎn)擊打開(kāi)按鈕沒(méi)有任何反應(yīng),現(xiàn)在我想做到以下兩點(diǎn)
    1.在初次打開(kāi)保存對(duì)話框時(shí),就文件名輸入欄中默認(rèn)一個(gè)文件名
    2.還有,如果在文件名輸入欄中什么也不輸入的情況下,我要讓保存或者打開(kāi)按鈕灰掉,怎么做到呢,就像word中的另存為一樣,謝謝!  回復(fù)  更多評(píng)論   

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧 2006-12-19 10:36 leon

    1、在打開(kāi)JFileChooser前,先調(diào)用setSelectedFile(File file) 方法設(shè)置一個(gè)文件。
    2、JFileChooser 沒(méi)有提供類似功能的API,但是有一種變通的做法。可以自己包裝一個(gè)組件,這個(gè)組件是一個(gè)JDialog,然后它上面放一個(gè) JFileChooser 和2個(gè)JButton,2個(gè)JButton分別為保存和取消。初始化時(shí)通過(guò)設(shè)置JFileChooser.setControlButtonsAreShown(boolean b)方法隱藏JFileChooser自己的保存和取消按鈕,然后注冊(cè)PropertyChangeListener監(jiān)聽(tīng)JFileChooser中的屬性改變事件更新自定義的保存和取消按鈕狀態(tài)。不過(guò)這個(gè)方法不能監(jiān)聽(tīng)文件名輸入欄,因?yàn)槲募斎霗趦?nèi)容改變我們無(wú)法監(jiān)聽(tīng)JFileChooser的屬性改變事件,JFileChooser也沒(méi)有提供API給文件名輸入欄添加監(jiān)聽(tīng)器。  回復(fù)  更多評(píng)論   

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧[未登錄](méi) 2007-03-21 10:49 allen

    這種情況怎么辦?

    使用JFileChooser時(shí)如何對(duì)Dialog中輸入的filename進(jìn)行限制?


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

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

    新手求教,謝謝
      回復(fù)  更多評(píng)論   

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧 2009-04-29 08:53 iSnail

    這種情況怎么辦?

    使用JFileChooser時(shí)如何對(duì)Dialog中輸入的filename進(jìn)行限制?


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

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

    如上所述,用戶輸入// 或者\(yùn)\,從組件獲得文件名就已經(jīng)是過(guò)濾后的,根本不包含左斜杠或者右斜杠。需要怎么處理  回復(fù)  更多評(píng)論   

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧 2009-05-28 10:51 gousheng12345

    樓主,你這個(gè)程序不管用呀  回復(fù)  更多評(píng)論   

    # re: [Swing]在 JFileChooser 中進(jìn)行文件驗(yàn)證的小技巧 2012-08-03 18:20 ngh

    輸入*還是會(huì)有問(wèn)題  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    DSC_0106.jpg
    本博客已經(jīng)搬家到CSDN
    http://blog.csdn.net/chenweionline




    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    About Technology

    My Favorite Website

    搜索

    積分與排名

    最新評(píng)論

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

    閱讀排行榜

    主站蜘蛛池模板: 男女啪啪免费体验区| 精品韩国亚洲av无码不卡区 | caoporm超免费公开视频| 日本一区二区三区日本免费| 亚洲午夜无码久久久久小说| 歪歪漫画在线观看官网免费阅读| 4480yy私人影院亚洲| 2015日韩永久免费视频播放| 亚洲韩国在线一卡二卡| 亚洲人成在线免费观看| 亚洲精品视频专区| 免费不卡视频一卡二卡| 亚洲精品无码一区二区| 亚洲精品国产精品乱码视色| 成人片黄网站色大片免费观看cn| 色噜噜亚洲精品中文字幕| 久久免费国产精品一区二区| 无码欧精品亚洲日韩一区| 69式互添免费视频| 亚洲国产日韩综合久久精品| 精品免费国产一区二区三区| 看免费毛片天天看| 亚洲色欲久久久综合网东京热| a级毛片免费在线观看| 亚洲综合色丁香麻豆| 在线观看免费为成年视频| 国产精品亚洲精品日韩电影| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲无线观看国产精品| 十九岁在线观看免费完整版电影| 亚洲AV无码之日韩精品| 免费无码又爽又刺激网站| 亚洲欧洲精品成人久久曰影片| a级毛片免费在线观看| 亚洲国产精品网站久久| 99热在线观看免费| 亚洲AV综合色区无码一二三区| 国产亚洲精品高清在线| 亚洲免费视频观看| 一级人做人爰a全过程免费视频| 亚洲天天在线日亚洲洲精|