读书人

小事例

发布时间: 2012-11-05 09:35:12 作者: rapoo

小例子
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);
}
}

}

读书人网 >软件架构设计

热点推荐