Do you drink java?



                像寫情書一樣coding

           

          2006年11月23日

          發發牢騷

          IE7訪問我的部落格頁面布局異常!

          Firefox2.0添加新隨筆JS腳本異常!!

          |/__


          換了風格

          posted @ 2006-11-23 16:49 leon 閱讀(410) | 評論 (0)編輯 收藏

          [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 @ 2006-11-23 14:15 leon 閱讀(5405) | 評論 (7)編輯 收藏

          導航

          統計

          公告

          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: 胃痙攣
          • 媽啊 痛的快死了~!第一次感覺過這樣的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
          • --痛啊

          閱讀排行榜

          主站蜘蛛池模板: 兰州市| 察隅县| 淮北市| 浑源县| 五峰| 井冈山市| 德清县| 苍梧县| 吕梁市| 恩施市| 黑水县| 鄂尔多斯市| 葫芦岛市| 新丰县| 拉萨市| 剑河县| 庆阳市| 扶风县| 江门市| 滕州市| 福清市| 隆尧县| 两当县| 蕲春县| 如东县| 阿拉尔市| 石棉县| 辽宁省| 中宁县| 安徽省| 青海省| 阜南县| 华坪县| 呼伦贝尔市| 文山县| 洛扎县| 和静县| 巴彦淖尔市| 闽侯县| 济源市| 大邑县|