首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

小事例

2012-11-05 
小例子package com.cnex.oss.managerupdate.toolsimport java.beans.PropertyChangeListenerimport java

小例子
    package com.cnex.oss.managerupdate.tools;
   
    import java.beans.PropertyChangeListener;
    import java.beans.PropertyChangeSupport;
    import java.util.Timer;
    import java.util.TimerTask;
   
    import org.eclipse.jface.dialogs.IDialogConstants;
    import org.eclipse.jface.layout.GridDataFactory;
    import org.eclipse.jface.window.Window;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Image;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Control;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
   
    /**
     * 定时执行对话框 。
     */
    public class TimerMessageDialog extends MessageDialog2 {
   
      /** 标签文本     */
      protected static Label localMessageLabel;
     
      /** 属性修改支持实现类     */
      private PropertyChangeSupportImpl instance = new PropertyChangeSupportImpl();
   
      /** 定时器     */
      private Timer timer;
     
      /**
       * 构造函数。
       * @param parentShell
       * @param dialogTitle
       * @param dialogMessage
       */
      public TimerMessageDialog(Shell parentShell, String dialogTitle, String dialogMessage) {
        super(parentShell, dialogTitle, null, dialogMessage, INFORMATION, new String[] {"立即重启","隐藏"}, 0);
        setShellStyle(SWT.BORDER | SWT.MIN);
      }
   
      protected Control createMessageArea(Composite composite) {
        // create composite
        // create image
        Image image = getImage();
        if (image != null) {
          imageLabel = new Label(composite, SWT.NULL);
          image.setBackground(imageLabel.getBackground());
          imageLabel.setImage(image);
    //      addAccessibleListeners(imageLabel, image);
          GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING)
              .applyTo(imageLabel);
        }
        // create message
        if (message != null) {
          messageLabel = new Label(composite, getMessageLabelStyle());
          TimerMessageDialog.localMessageLabel = messageLabel;
          messageLabel.setText(message);
          GridDataFactory
              .fillDefaults()
              .align(SWT.FILL, SWT.BEGINNING)
              .grab(true, false)
              .hint(
                  convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH),
                  SWT.DEFAULT).applyTo(messageLabel);
        }
        return composite;
      }
     
      /**
       * 打开定时关闭对话框,顾名思义,就是在指定的时间自动关闭  。
       */
      public void open(final int second,final String message) {
        setBlockOnOpen(false);
        open();
       
    //    final MessageFormat format = new MessageFormat("系统检查到重要插件的更新,系统将会在 {0} 秒后自动重启,请注意保存文件");
       
        timer = new Timer("检查更新");
        final TimerTask task = new TimerTask() {
          int count = second;
          public void run() {
            Display display = Display.getDefault();
            if (display == null) {
              return;
            }
            display.asyncExec(new Runnable() {
              public void run() {
                try {
   
                  if (count == 0) {
                    cancel();
                    buttonPressed(Window.OK);
                  } else {
                    count -= 1;
                    if (!localMessageLabel.isDisposed()&&localMessageLabel != null) {
                      localMessageLabel.setText(message+"系统将在:" + count + "秒后自动重启");
    //                localMessageLabel.setText(format.format(new Object[]{new Integer(count)}));
                    }
                  }
               
                }catch (Exception e) {
                  e.printStackTrace();
                }
              }
            });
          }
        };
        timer.schedule(task, 1000, 1000);
      }
     
      protected void buttonPressed(int buttonId) {
        if(buttonId == Window.OK) {
          timer.cancel();
          firePropertyChange(IPropery.RESTART_OK_PRESSED, false, true);
        } else if(buttonId == Window.CANCEL) {
          close();
        }
      }
     
      /**
       * 添加属性事件  。
       */
      public void addPropertyChangeListener(PropertyChangeListener l) {
        instance.addPropertyChangeListener(l);
      }
     
      /**
       * 删除属性修改事件  。
       */
      public void removePropertyChangeListener(PropertyChangeListener l) {
        instance.removePropertyChangeListener(l);
      }
     
      /**
       * 通知属性修改事件(通知前台代码修改)  。
       */
      public void firePropertyChange(String prop, Object old, Object newValue) {
        instance.firePropertyChange(prop, old, newValue);
      }
     
      /**
       * 属性修改支持实现类  。
       */
      public class PropertyChangeSupportImpl {
       
        /** 属性修改支持     */
        PropertyChangeSupport listeners = new PropertyChangeSupport(this);
   
        /**
         * 添加属性修改事件  。
         */
        public void addPropertyChangeListener(PropertyChangeListener l) {
          listeners.addPropertyChangeListener(l);
        }
   
        /**
         * 通知修改事件发生  。
         */
        public void firePropertyChange(String prop, Object old, Object newValue) {
          listeners.firePropertyChange(prop, old, newValue);
        }
   
        /**
         * 通知事件修改  。
         */
        protected void fireStructureChange(String prop, Object child) {
          listeners.firePropertyChange(prop, null, child);
        }
   
        /**
         * 删除属性修改事件/  。

        public void removePropertyChangeListener(PropertyChangeListener l) {
          listeners.removePropertyChangeListener(l);
        }
      }
   
    }

热点排行