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

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

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

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    使用InputVerifier設計Swing校驗包

    Posted on 2008-07-27 10:43 qiyadeng 閱讀(2095) 評論(1)  編輯  收藏

    使用InputVerifier設計Swing校驗包

    盡管有許多針對Swing的校驗框架,并且Swing中也有API InputVerifier用于數據校驗,InputVerifier易于使用并且容易定制。本文將在InputVerifier的基礎上構建一個可用的校驗包,可以在其它的Swing應用之中。

    InputVerifier類在javax.swing包中。它有一個抽象方法,我們需要實現一個叫verify()的方法,這個方法接受一個JComponent作為參數,返回值為true或false。一旦我們實現了verify()方法,我們可以在JTextField中使用如下:

    JTextField text = new JTextField();

    Text.setInputVerifier(new MyVerifier());

    然而,InputVerifier本身并沒有什么意思。它的作用是防止用戶輸入錯誤的信息在組件中,阻止用戶把輸入光標移動到其他組件上。這種方式令人感到厭煩并且用戶不知道錯誤所在。InputVerifier并沒有提供一些更好的功能,所以我們需要構建一個如下校驗包:

    1. 如果數據不正確時,可以改變輸入組件的背景顏色。

    2. 如果數據不正確時,可以彈出消息提示用戶錯誤出在什么地方,應該怎么處理。

    3. 我們需要通知Form窗體每個組件的校驗結果,這樣的話Form窗體可以執行相應的動作。(例如啟動”OK”按鈕)

    4. 如果用戶改正了組件的錯誤數據,則錯誤提示信息應消失。

    我們的包中包含一個抽象類,這個抽象類處理了大部分的工作,我們只需要實現一個方法,決定使用什么規則來進行數據校驗;同時也提供一個接口,如果需要校驗的Form窗體需要校驗結果通知Form窗體,則可以實現該接口。好了,我們現在可以設計這個接口。

    WantsValidationStatus接口

    下面的接口可以提供一種方式用于出發Form窗體的制定事件。

    package ica.swing.validation;

    public interface WantsValidationStatus {

    void validateFailed(); // Called when a component has failed validation.

    void validatePassed(); // Called when a component has passed validation.

    }

    實現這個接口可以通知Form窗體校驗狀態,但是實現該接口不是必須的。我們也可以不是實現這個接口,如果校驗失敗不做任何事情。但是,我認為這樣的設計是比較優美的。接下來看看我們的抽象類。

    AbstractValidator類

    AbstarctValidator處理了顯示出錯提示,改變出錯背景,通知Form窗體等許多工作。只留下一個抽象的方法待實現,protected abstract Boolean validateCriteria(JComponent c),這個方法我們需要提供自己的校驗規則用于校驗組件。以下是抽象類:

    protected abstract boolean validationCriteria(JComponent c);

    public boolean verify(JComponent c) {

    if (!validationCriteria(c)) {

    c.setBackground(Color.PINK);

    //messageLabel.setSize(0,0);

    //messageLabel.setBackground(color);

    point = c.getLocation();

    double x =point.getX();

    double y = point.getY();

    Point p = new Point();

    p.setLocation(x,y+c.getHeight());

    tooltip= new HalfOpaqueToolTip(

    message, new Color( 250 , 250 , 200 ), Color.RED, Color.BLACK, 1,dialog,p );

    c.addMouseListener(tooltip);

    return false;

    }

    Verify()方法

    當需要校驗是調用方法boolean verify(JComponent c),下面用一例子示之。

    public class ToolTipsEmptyValidator extends ToolTipsAbstractValidator {

    public ToolTipsEmptyValidator(JDialog dialog, JTextField c, String message) {

    super(dialog, c, message);

    }

    public ToolTipsEmptyValidator(JFrame dialog, JTextField c, String message) {

    super(dialog, c, message);

    }

    public ToolTipsEmptyValidator(JDialog dialog, JTextArea c, String message) {

    super(dialog, c, message);

    }

    public ToolTipsEmptyValidator(JFrame dialog, JTextArea c, String message) {

    super(dialog, c, message);

    }

    @Override

    protected boolean validationCriteria(JComponent c) {

    if (c instanceof JTextField){

    if (((JTextField) c).getText().equals(""))

    return false;

    }

    else if (c instanceof JTextArea){

    if (((JTextArea) c).getText().equals(""))

    return false;

    }

    return true;

    }

    }

    調用方法如下:

    ToolTipsEmptyValidator validator1 = new ToolTipsEmptyValidator(jDialog,localdbPanel.getIpAddressField(),"Error,IP Address can't be empty");

    boolean flag1 = validator1.verify(localdbPanel.getIpAddressField());

    下圖是使用該校驗包的示例。

    image

    Feedback

    # re: 使用InputVerifier設計Swing校驗包  回復  更多評論   

    2008-10-31 17:11 by hb148
    東西不錯,我按你的想法,弄了弄,不成,能給發個包嗎?hb148@sina.com
    謝謝了!

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲av无码专区首页| 亚洲精品成人久久久| 亚洲av无码一区二区三区天堂古代| 在线观看免费无码专区| 亚洲成AV人片一区二区密柚| 永久免费A∨片在线观看| 亚洲VA中文字幕无码一二三区| 国偷自产一区二区免费视频| 亚洲综合色婷婷七月丁香| 久久久久久久久久免免费精品| 国产亚洲av人片在线观看| 国产麻豆成人传媒免费观看| 精品亚洲一区二区| 最近免费中文字幕大全免费| 国产精品亚洲精品观看不卡| 成人无遮挡毛片免费看| 西西人体大胆免费视频| 亚洲精品成人片在线观看精品字幕 | 亚洲国产av一区二区三区| 一级一级毛片免费播放| 亚洲国产精品SSS在线观看AV| 50岁老女人的毛片免费观看| 亚洲伊人久久精品| 免费精品国产自产拍观看| 巨胸狂喷奶水视频www网站免费| 亚洲AV无码久久| 蜜桃视频在线观看免费网址入口 | 国产免费播放一区二区| 亚洲国产精品久久久久婷婷软件| 黄页网站在线观看免费高清| 久久亚洲精品成人无码| 亚洲色精品88色婷婷七月丁香| 四虎免费影院ww4164h| 羞羞视频在线免费观看| 亚洲成A∨人片在线观看不卡| 999在线视频精品免费播放观看| 国产亚洲美女精品久久久久| 亚洲av无码不卡一区二区三区| 99精品全国免费观看视频| av电影在线免费看| 亚洲娇小性色xxxx|