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

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

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

    West Farm
    吾本布衣,生于川北,躬耕于代碼的田地上。
    posts - 16,  comments - 15,  trackbacks - 0
    Important:該類有諸多不盡人意的地方,讀者如果要用,請(qǐng)自行完善,但是至少值得一試。
    原代碼是一個(gè)老外寫的在桌面右下角彈出消息提示的一個(gè)類,我進(jìn)行了改寫。
    任何改進(jìn),希望你能不吝分享。



    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Color;
    import org.eclipse.swt.graphics.Font;
    import org.eclipse.swt.graphics.FontData;
    import org.eclipse.swt.graphics.GC;
    import org.eclipse.swt.graphics.Image;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.graphics.Rectangle;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Scrollable;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.wb.swt.SWTResourceManager;

    /**
     * 具有淡入淡出效果且不需要用戶點(diǎn)擊關(guān)閉的消息提示框。
     * 
    @author ggfan@amarsoft
     *
     
    */
    public class Notifier {
        
    private static final int DISPLAY_TIME = 2000;
        
        
    private static final int FADE_TIMER = 50;
        
        
    private static final int FADE_IN_STEP = 30;
        
        
    private static final int FADE_OUT_STEP = 8;

        
    private static final int FINAL_ALPHA = 225;

        
    public static int DEFAULT_WIDTH = 150;
        
        
    public static  int DEFAULT_HEIGHT = 60;

        
    private static Color _titleFgColor = SWTResourceManager.getColor(407397);

        
    private static Color _fgColor = _titleFgColor;

        
    private static Color _bgFgGradient = SWTResourceManager.getColor(226239249);

        
    private static Color _bgBgGradient = SWTResourceManager.getColor(177211243);

        
    private static Color _borderColor = SWTResourceManager.getColor(407397);

        
    private static Image _oldImage;
        
    // TODO Scrollable可能不合適
        public static void notify(Scrollable scrollable, final String msg) {

            
    final Shell parentShell = scrollable.getShell();
            
    final Shell newShell = new Shell(parentShell, SWT.NO_FOCUS | SWT.NO_TRIM);
            newShell.setLayout(
    new FillLayout());
            newShell.setForeground(_fgColor);
            newShell.setBackground(_bgBgGradient);
            newShell.setBackgroundMode(SWT.INHERIT_FORCE);
            scrollable.addDisposeListener(new DisposeListener(){
        public void widgetDisposed(DisposeEvent e) {
    newShell.dispose();
        }
    });
            
    final Composite inner = new Composite(newShell, SWT.NONE);
            FillLayout layout 
    = new FillLayout();
            layout.marginWidth 
    = 20;
            layout.marginHeight 
    = 20;
            inner.setLayout(layout);

            newShell.addListener(SWT.Resize, 
    new Listener() {
                
    public void handleEvent(Event event) {
                    
    try {
                        Rectangle rect 
    = newShell.getClientArea();
                        Image newImage 
    = new Image(Display.getDefault(), Math.max(1, rect.width), rect.height);
                        GC gc 
    = new GC(newImage);
                        
    // 背景
                        gc.setForeground(_bgFgGradient);
                        gc.setBackground(_bgBgGradient);
                        gc.fillGradientRectangle(rect.x, rect.y, rect.width, rect.height, 
    true);
                        
    // 邊框
                        gc.setLineWidth(2);
                        gc.setForeground(_borderColor);
                        gc.drawRectangle(rect.x 
    + 1, rect.y + 1, rect.width - 2, rect.height - 2);

                        gc.dispose();
                        newShell.setBackgroundImage(newImage);
                        
    if (_oldImage != null) {
                            _oldImage.dispose();
                        }
                        _oldImage 
    = newImage;
                    } 
    catch (Exception err) {
                        err.printStackTrace();
                    }
                }
            });

            Label text 
    = new Label(inner, SWT.WRAP | SWT.CENTER);
            Font tf 
    = text.getFont();
            FontData tfd 
    = tf.getFontData()[0];
            tfd.setStyle(SWT.BOLD);
            tfd.height 
    = 8;
            text.setFont(SWTResourceManager.getFont(tfd.getName(), 
    8, SWT.NORMAL));
            text.setForeground(_fgColor);
            text.setText(msg);

            newShell.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

            
    if (Display.getDefault().getActiveShell() == null || Display.getDefault().getActiveShell().getMonitor() == null) { 
                
    return
            }
            newShell.setLocation(computePoint(scrollable));
            newShell.setAlpha(
    0);
            newShell.setVisible(
    true);

            fadeIn(newShell);
        }
        
        
    // TODO 當(dāng)有滾動(dòng)條出現(xiàn)的時(shí)候是否能夠居中?
        private static Point computePoint(Scrollable scrollable) {
            Point p 
    = scrollable.toDisplay(scrollable.getClientArea().x, scrollable.getClientArea().y);
            
    int w = scrollable.getClientArea().width;
            
    int h = scrollable.getClientArea().height;
            p.x 
    += w / 2 - DEFAULT_WIDTH / 2 ;
            p.y 
    += h / 2 - DEFAULT_HEIGHT / 2
            
    return p;
        }

        
    private static void fadeIn(final Shell _shell) {
            Runnable run 
    = new Runnable() {
                @Override
                
    public void run() {
                    
    try {
                        
    if (_shell == null || _shell.isDisposed()) {
                            
    return;
                        }

                        
    int cur = _shell.getAlpha();
                        cur 
    += FADE_IN_STEP;

                        
    if (cur > FINAL_ALPHA) {
                            _shell.setAlpha(FINAL_ALPHA);
                            startTimer(_shell);
                            
    return;
                        }

                        _shell.setAlpha(cur);
                        Display.getDefault().timerExec(FADE_TIMER, 
    this);
                    } 
    catch (Exception err) {
                        err.printStackTrace();
                    }
                }
            };
            Display.getDefault().timerExec(FADE_TIMER, run);
        }

        
    private static void startTimer(final Shell _shell) {
            Runnable run 
    = new Runnable() {

                @Override
                
    public void run() {
                    
    try {
                        
    if (_shell == null || _shell.isDisposed()) {
                            
    return;
                        }

                        fadeOut(_shell);
                    } 
    catch (Exception err) {
                        err.printStackTrace();
                    }
                }

            };
            Display.getDefault().timerExec(DISPLAY_TIME, run);

        }

        
    private static void fadeOut(final Shell _shell) {
            
    final Runnable run = new Runnable() {

                @Override
                
    public void run() {
                    
    try {
                        
    if (_shell == null || _shell.isDisposed()) {
                            
    return;
                        }

                        
    int cur = _shell.getAlpha();
                        cur 
    -= FADE_OUT_STEP;

                        
    if (cur <= 0) {
                            _shell.setAlpha(
    0);
                             
    if (_oldImage != null) {
                                 _oldImage.dispose();
                             }
                            _shell.dispose();
                            
    return;
                        }

                        _shell.setAlpha(cur);

                        Display.getDefault().timerExec(FADE_TIMER, 
    this);

                    } 
    catch (Exception err) {
                        err.printStackTrace();
                    }
                }

            };
            Display.getDefault().timerExec(FADE_TIMER, run);

        }
    }
    posted on 2011-10-12 10:48 West Farmer 閱讀(3270) 評(píng)論(6)  編輯  收藏 所屬分類: Eclipse-RCP

    FeedBack:
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。
    2011-10-12 18:04 | [西部農(nóng)民]
    bug fix:
    scrollable.addDisposeListener(new DisposeListener(){
    public void widgetDisposed(DisposeEvent e) {
    newShell.dispose();
    }
    });  回復(fù)  更多評(píng)論
      
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。[未登錄]
    2013-02-27 16:12 | Sam
    當(dāng)多個(gè)消息提示框同時(shí)顯示,會(huì)出現(xiàn)整個(gè)程序無響應(yīng)的問題,我是在Eclipse RCP里用的,不知道的什么原因  回復(fù)  更多評(píng)論
      
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。
    2013-03-01 14:58 | @shrinkAshirt
    bug fixed:
    scrollable.addDisposeListener(new DisposeListener() {

    @Override
    public void widgetDisposed(DisposeEvent arg0) {
    // TODO Auto-generated method stub
    newShell.dispose();
    }
    });  回復(fù)  更多評(píng)論
      
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。
    2013-03-01 15:29 | @shrinkAshirt
    傳入scrollable干什么
      回復(fù)  更多評(píng)論
      
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。
    2013-03-14 00:13 | [西部農(nóng)民]
    多個(gè)彈出框同時(shí)出現(xiàn)應(yīng)該是不支持的,就像QQ的消息通知。是要一個(gè)一個(gè)顯示的,這應(yīng)該和UI應(yīng)用的線程模式有關(guān)。

    @Sam
      回復(fù)  更多評(píng)論
      
    # re: SWT:淡入淡出消息提示框,無需用戶干預(yù)。
    2015-10-29 14:59 | 李堯
    博主,怎么調(diào)用啊,寫全代碼吧,沒法用  回復(fù)  更多評(píng)論
      

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


    網(wǎng)站導(dǎo)航:
     

    <2015年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲一区二区女搞男| 182tv免费视频在线观看| 亚洲邪恶天堂影院在线观看| 国产小视频在线免费| 亚洲毛片在线免费观看| 少妇性饥渴无码A区免费| 五月天国产成人AV免费观看| 国产亚洲精品bv在线观看| 亚洲专区先锋影音| 中文字幕人成人乱码亚洲电影| 性做久久久久免费看| 成人性生交大片免费看无遮挡| 日韩精品无码免费一区二区三区| kk4kk免费视频毛片| 国内成人精品亚洲日本语音| 在线精品亚洲一区二区| 亚洲码在线中文在线观看| 亚洲三级电影网址| 亚洲成AV人片在线观看WWW| 亚洲人成人一区二区三区| 最新亚洲成av人免费看| 亚洲精品高清在线| 亚洲成aⅴ人片久青草影院| 免费一级毛片清高播放| 永久免费毛片手机版在线看| 成人毛片免费视频| 男女做羞羞的事视频免费观看无遮挡| 青青草无码免费一二三区| 少妇人妻偷人精品免费视频 | 日本免费一二区在线电影| 国产成人免费爽爽爽视频| 24小时日本在线www免费的| 无码国产精品久久一区免费| 精品久久久久成人码免费动漫 | 国产精品亚洲精品日韩已满| 亚洲综合无码AV一区二区| 亚洲精品午夜国产VA久久成人| 国产AV无码专区亚洲AV男同| 亚洲综合在线视频| 亚洲乱码一二三四五六区| 亚洲精品中文字幕无乱码麻豆|