<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設(shè)計(jì)Swing校驗(yàn)包

    盡管有許多針對Swing的校驗(yàn)框架,并且Swing中也有API InputVerifier用于數(shù)據(jù)校驗(yàn),InputVerifier易于使用并且容易定制。本文將在InputVerifier的基礎(chǔ)上構(gòu)建一個(gè)可用的校驗(yàn)包,可以在其它的Swing應(yīng)用之中。

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

    JTextField text = new JTextField();

    Text.setInputVerifier(new MyVerifier());

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

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

    2. 如果數(shù)據(jù)不正確時(shí),可以彈出消息提示用戶錯(cuò)誤出在什么地方,應(yīng)該怎么處理。

    3. 我們需要通知Form窗體每個(gè)組件的校驗(yàn)結(jié)果,這樣的話Form窗體可以執(zhí)行相應(yīng)的動(dòng)作。(例如啟動(dòng)”O(jiān)K”按鈕)

    4. 如果用戶改正了組件的錯(cuò)誤數(shù)據(jù),則錯(cuò)誤提示信息應(yīng)消失。

    我們的包中包含一個(gè)抽象類,這個(gè)抽象類處理了大部分的工作,我們只需要實(shí)現(xiàn)一個(gè)方法,決定使用什么規(guī)則來進(jìn)行數(shù)據(jù)校驗(yàn);同時(shí)也提供一個(gè)接口,如果需要校驗(yàn)的Form窗體需要校驗(yàn)結(jié)果通知Form窗體,則可以實(shí)現(xiàn)該接口。好了,我們現(xiàn)在可以設(shè)計(jì)這個(gè)接口。

    WantsValidationStatus接口

    下面的接口可以提供一種方式用于出發(fā)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.

    }

    實(shí)現(xiàn)這個(gè)接口可以通知Form窗體校驗(yàn)狀態(tài),但是實(shí)現(xiàn)該接口不是必須的。我們也可以不是實(shí)現(xiàn)這個(gè)接口,如果校驗(yàn)失敗不做任何事情。但是,我認(rèn)為這樣的設(shè)計(jì)是比較優(yōu)美的。接下來看看我們的抽象類。

    AbstractValidator類

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

    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()方法

    當(dāng)需要校驗(yàn)是調(diào)用方法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;

    }

    }

    調(diào)用方法如下:

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

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

    下圖是使用該校驗(yàn)包的示例。

    image

    Feedback

    # re: 使用InputVerifier設(shè)計(jì)Swing校驗(yàn)包  回復(fù)  更多評論   

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码中文久久字幕| 亚洲噜噜噜噜噜影院在线播放| 国产成人亚洲精品青草天美| 九月丁香婷婷亚洲综合色| 亚洲免费精彩视频在线观看| 亚洲精品视频在线观看免费| 中文字幕亚洲男人的天堂网络| 羞羞的视频在线免费观看| 中文字幕不卡高清免费| 91久久青青草原线免费| 成人黄软件网18免费下载成人黄18免费视频 | 国产成人午夜精品免费视频| 国产精品国产免费无码专区不卡| 久久久久亚洲AV无码专区桃色| 国产v亚洲v天堂无码网站| 亚洲天堂电影在线观看| 看Aⅴ免费毛片手机播放| 国偷自产一区二区免费视频| 无码乱肉视频免费大全合集 | 中文字幕久久亚洲一区| 亚洲精品在线电影| 妇女自拍偷自拍亚洲精品| 久久国产精品成人免费| 天天操夜夜操免费视频| 亚洲精品你懂的在线观看| 国产成人精品日本亚洲网址| 十八禁的黄污污免费网站| 国产大片91精品免费观看不卡| 波多野结衣中文一区二区免费| 亚洲日本中文字幕| 日韩色视频一区二区三区亚洲| 日本免费污片中国特一级| 永久久久免费浮力影院| 亚洲国产一区国产亚洲| 国产精品无码亚洲精品2021| 久久青草精品38国产免费| 免费国产成人午夜电影| 亚洲成人网在线播放| 国产亚洲精品免费视频播放 | 免费视频专区一国产盗摄| 中文字幕日韩亚洲|