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

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

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

    大夢(mèng)想家

    5年開發(fā)工程師,2年實(shí)施經(jīng)理,X年售前顧問,......
    數(shù)據(jù)加載中……
    打造仿淘寶注冊(cè)的Text(二)
    上次貼了幾張圖片出來顯擺,這次徹底公布代碼~大家看看原理就好,有興趣的朋友可以和我聯(lián)系,把SWT里面的控件都封裝一下,做一套驗(yàn)證框架出來~
      1package com.glnpu.dmp.controls;
      2
      3import org.eclipse.swt.SWT;
      4import org.eclipse.swt.events.ControlEvent;
      5import org.eclipse.swt.events.ControlListener;
      6import org.eclipse.swt.events.ModifyEvent;
      7import org.eclipse.swt.events.ModifyListener;
      8import org.eclipse.swt.events.PaintEvent;
      9import org.eclipse.swt.events.PaintListener;
     10import org.eclipse.swt.graphics.GC;
     11import org.eclipse.swt.graphics.Image;
     12import org.eclipse.swt.widgets.Composite;
     13import org.eclipse.swt.widgets.Display;
     14import org.eclipse.swt.widgets.Text;
     15
     16public class SuperText extends Composite implements PaintListener, ControlListener{
     17
     18    private Text text;
     19    
     20    private Image tempCorner;
     21    
     22    private Image tempMsg;
     23    
     24    private Image warning_corner;
     25    
     26    private Image ok_corner;
     27    
     28    private Image error_corner;
     29    
     30    private Image msg_warning;
     31    
     32    private Image msg_ok;
     33    
     34    private Image msg_error;
     35    
     36    /**
     37     * Create the composite
     38     * @param parent
     39     * @param style
     40     */

     41    public SuperText(Composite parent, int style) {
     42        super(parent, SWT.NONE);
     43        initResource();
     44        initControls(style);
     45        this.addPaintListener(this);
     46        this.addControlListener(this);
     47    }

     48
     49    private void initResource() {
     50        warning_corner = new Image(Display.getDefault(), "icons/input_warning_corner.gif");
     51        ok_corner = new Image(Display.getDefault(), "icons/input_ok_corner.gif");
     52        error_corner = new Image(Display.getDefault(), "icons/input_error_corner.gif");
     53        
     54        msg_warning = new Image(Display.getDefault(), "icons/standard_msg_warning.gif");
     55        msg_ok = new Image(Display.getDefault(), "icons/standard_msg_ok.gif");
     56        msg_error = new Image(Display.getDefault(), "icons/standard_msg_error.gif");
     57        
     58        tempCorner = warning_corner;
     59        tempMsg = msg_warning;
     60    }

     61
     62    private void initControls(int style) {
     63        text = new Text(this, SWT.FLAT|style);
     64        text.addModifyListener(new ModifyListener(){
     65            public void modifyText(ModifyEvent e) {
     66                if(SuperText.this.text.getText()!=null && !SuperText.this.text.getText().equals("")) {
     67                    if(SuperText.this.text.getText().length()>10{
     68                        tempMsg = msg_ok;
     69                        tempCorner = ok_corner;
     70                        SuperText.this.redraw();
     71                    }
    else {
     72                        tempCorner = error_corner;
     73                        tempMsg = msg_error;
     74                        SuperText.this.redraw();
     75                    }

     76
     77                }
    else {
     78                    System.out.println("do here");
     79                    tempCorner = warning_corner;
     80                    tempMsg = msg_warning;
     81                    SuperText.this.redraw();
     82                }

     83            }

     84        }
    );
     85    }

     86
     87    @Override
     88    public void dispose() {
     89        super.dispose();
     90    }

     91
     92    @Override
     93    protected void checkSubclass() {}
     94
     95    public void paintControl(PaintEvent e) {
     96        System.out.println("paintControl");
     97        GC gc = e.gc;
     98        gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
     99        gc.fillGradientRectangle(11this.getSize().x-11-tempMsg.getBounds().width, this.getSize().y-2false);
    100        gc.drawRectangle(11this.getSize().x-11-tempMsg.getBounds().width, this.getSize().y-2);
    101        
    102        //set warning corner
    103        gc.drawImage(tempCorner, this.getSize().x-11-tempMsg.getBounds().width-tempCorner.getBounds().width, this.getSize().y-2-tempCorner.getBounds().height);
    104        
    105        //set msg warning
    106        gc.drawImage(tempMsg, this.getSize().x-tempMsg.getBounds().width-51);
    107        gc.dispose();
    108    }

    109
    110    public void controlMoved(ControlEvent e) {}
    111
    112    public void controlResized(ControlEvent e) {
    113        text.setBounds(22this.getSize().x-12-tempMsg.getBounds().width-tempCorner.getBounds().width, this.getSize().y-3);
    114    }

    115
    116}

    117
    實(shí)現(xiàn)原理其實(shí)就是繪制!所謂自定義控件其實(shí)就是兩種,一種就是用C寫,然后JAVA調(diào)用,用SWT封裝;第二種就是繪制;第一種的做法其實(shí)并不好,會(huì)讓SWT的控件失去跨平臺(tái)性~一般的做法都是第二種。
    大家可以看到整個(gè)類中沒有布局的出現(xiàn),其實(shí)真的是“無布局才是最好的布局!”,沒有布局反倒更加的靈活了,方便談不上,但是靈活性大大提高;
    Demo下載

    客戶虐我千百遍,我待客戶如初戀!

    posted on 2008-01-08 20:20 阿南 閱讀(1848) 評(píng)論(3)  編輯  收藏 所屬分類: Eclipse-RCPEclipse-SWT個(gè)人原創(chuàng)

    評(píng)論

    # re: 打造仿淘寶注冊(cè)的Text(二) 2008-01-08 22:00 xidudui

    很有用多謝誒

    # re: 打造仿淘寶注冊(cè)的Text(二)[未登錄] 2008-01-09 17:14 fisher

    不錯(cuò),期待作者能將它封裝一下。

    # re: 打造仿淘寶注冊(cè)的Text(二) 2008-01-10 15:30 xidudui

    受教了
    主站蜘蛛池模板: 亚洲色大成网站WWW国产| 亚洲人成人77777网站| 成年女人免费视频播放体验区 | 亚洲色大成网站www永久一区| 免费人成激情视频| 亚洲国产精品尤物yw在线| 亚洲人成国产精品无码| 亚洲精品无码专区久久久| 亚洲精品国产精品乱码不卡√| 日本红怡院亚洲红怡院最新| 国产aⅴ无码专区亚洲av| 亚洲AV日韩AV高潮无码专区| 亚洲第一视频网站| 亚洲精品在线免费观看视频| 亚洲一级免费毛片| 亚洲丁香婷婷综合久久| 337p日本欧洲亚洲大胆人人| 欧洲精品码一区二区三区免费看| 国产精品成人免费观看| 久久99精品国产免费观看| 亚洲高清视频免费| 精品国产免费观看久久久 | 久久这里只精品热免费99| 99久久99热精品免费观看国产| 亚洲精品视频免费在线观看| 啦啦啦中文在线观看电视剧免费版| 黄网址在线永久免费观看 | 婷婷精品国产亚洲AV麻豆不片| 亚洲网站在线免费观看| 亚洲无人区码一二三码区别图片 | 亚洲免费电影网站| 亚洲av无码成人影院一区| 成人免费视频一区二区| 久久这里只精品热免费99| 国产人在线成免费视频| 青青青国产色视频在线观看国产亚洲欧洲国产综合| 亚洲AV伊人久久青青草原| 无码欧精品亚洲日韩一区| 亚洲人成未满十八禁网站 | 亚洲中字慕日产2020| 老司机精品视频免费|