📄 datecalccomposite.java
字号:
package net.sf.pim.calc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sf.component.calendar.SWTCalendar;
import net.sf.component.calendar.SWTCalendarEvent;
import net.sf.component.calendar.SWTCalendarListener;
import net.sf.pim.UiUtil;
import net.sf.util.ConfigHelper;
import net.sf.util.StringUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* 计算组件,对用户的日期,计算持续日和工作日
* @author levin
*
*/
public class DateCalcComposite extends Composite{
//控件,参见WorkCondition
private Text rq1, rq2,key;
private SWTCalendar calendar1;
private SWTCalendar calendar2;
public DateCalcComposite(Composite parent, int style) {
super(parent, style);
create();
}
private void create(){
Composite composite=this;
GridLayout gl=new GridLayout();
gl.numColumns=3;
composite.setLayout(gl);
Label dummy=new Label(composite,SWT.NULL); //占个位置
dummy.setText("");
rq1 = new Text(composite, SWT.NULL);
rq1.addVerifyListener(new VerifyListener(){
public void verifyText(VerifyEvent e) {
//几种情况,输入控制键,输入中文,输入字符,输入数字
//正整数验证
Pattern pattern = Pattern.compile("[0-9]\\d*");
Matcher matcher = pattern.matcher(e.text);
if(matcher.matches()) //处理数字
e.doit=true;
else if(e.text.length() > 0) //有字符情况,包含中文、空格
e.doit=false;
else //控制键
e.doit=true;
}});
rq1.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
UiUtil.syncCalendar(rq1.getText(),calendar1);
}});
rq2 = new Text(composite, SWT.NULL);
rq2.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
UiUtil.syncCalendar(rq2.getText(),calendar2);
}});
String[] s3 = ConfigHelper.getSearch3();
rq1.setText(s3[0]);
rq2.setText(s3[1]);
rq1.setFont(UiUtil.getFont());
rq2.setFont(UiUtil.getFont());
Label labelsRq = new Label(composite, SWT.NULL);
labelsRq.setText("起始日期:");
calendar1 = new SWTCalendar(composite,SWT.FLAT|SWTCalendar.RED_SUNDAY);
calendar1.addSWTCalendarListener(new SWTCalendarListener(){
public void dateChanged(SWTCalendarEvent event) {
rq1.setText(StringUtil.getDefaultDateFormat().format(event.getCalendar().getTime()));
}});
calendar2 = new SWTCalendar(composite,SWT.FLAT|SWTCalendar.RED_SUNDAY);
calendar2.addSWTCalendarListener(new SWTCalendarListener(){
public void dateChanged(SWTCalendarEvent event) {
rq2.setText(StringUtil.getDefaultDateFormat().format(event.getCalendar().getTime()));
}});
//赋初值
UiUtil.syncCalendar(s3[0], calendar1);
UiUtil.syncCalendar(s3[1], calendar2);
Button button=new Button(composite,SWT.FLAT);
button.setText("计算");
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
key.setText("日历日:"+StringUtil.delta(calendar1.getCalendar().getTime(),calendar2.getCalendar().getTime())+"天;工作日:"+StringUtil.deltaWorkDay(calendar1.getCalendar().getTime(),calendar2.getCalendar().getTime())+"天");
key.pack();
}});
key = new Text(composite, SWT.READ_ONLY);
GridData gd=new GridData();
gd.horizontalSpan=2;
key.setLayoutData(gd);
key.setFont(UiUtil.getFont());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -