BaseDialog是我个人项目中使用的基类,主要内容为CalendarDialog 中的createDialogArea(Composite parent)接口,以此为基础,就可以做出如下弹框,大家可根据需要自行修改。
效果截图:
代码如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
public class CalendarDialog extends BaseDialog {
HashMap<Integer, String> timeMap = new HashMap<Integer, String>();
DateTime calendar = null;
String dateStr = null;
Date date = null;
public CalendarDialog(Shell parent, String value) {
super(parent, "时间控件", null);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(CommonUtils.DATE_PATTERN);
try {
date = simpleDateFormat.parse(value + "+08");
} catch (ParseException e) {
date = new Date();
}
}
@Override
protected Composite createDialogArea(Composite parent) {
Composite area = super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
container.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, true));
GridLayout layout = new GridLayout(4, false);
container.setLayout(layout);
calendar = new DateTime(container, SWT.CALENDAR);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
calendar.setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
dateStr = calendar.getYear() + "-" + (calendar.getMonth() + 1) + "-" + calendar.getDay() + " ";
calendar.addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent e) {
// ignore
}
@Override
public void mouseDown(MouseEvent e) {
CalendarDialog.this.dateStr = calendar.getYear() + "-" + (calendar.getMonth() + 1) + "-" + calendar.getDay() + " ";
}
@Override
public void mouseUp(MouseEvent e) {
// ignore
}
});
calendar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
listSample(container);
return area;
}
public void listSample(Composite timeGroup) {
// 时分秒依次添加到组件列表中
addScrollList(timeGroup, 24, 0);
addScrollList(timeGroup, 60, 1);
addScrollList(timeGroup, 60, 2);
}
private List addScrollList(Composite container, int size, int time) {
final List list = new List (container, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
list.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
timeMap.put(time, list.getSelection()[0]);
}
}
);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.heightHint = 156;
list.setLayoutData(gridData);
String item[] = new String[size];
for(int i = 0; i < item.length; i++) {
if (i < 10) {
item[i] = "0" + i;
} else {
item[i] = "" + i;
}
}
list.setItems(item);
switch (time) {
case 0 :
list.setSelection(date.getHours());
timeMap.put(time, String.valueOf(date.getHours()));
break;
case 1 :
list.setSelection(date.getMinutes());
timeMap.put(time, String.valueOf(date.getMinutes()));
break;
case 2 :
list.setSelection(date.getSeconds());
timeMap.put(time, String.valueOf(date.getSeconds()));
break;
default:
break;
}
return list;
}
public String getDateStr() {
// 时区默认使用东八区
dateStr += timeMap.get(0) + ":" + timeMap.get(1) + ":" + timeMap.get(2) + "+08";
SimpleDateFormat dateFormat = new SimpleDateFormat(CommonUtils.DATE_PATTERN);
try {
Date parse = dateFormat.parse(dateStr);
dateStr = dateFormat.format(parse);
} catch (ParseException e) {
e.printStackTrace();
}
return dateStr;
}
}