java 日期选着插件_SWT中的日期选择控件

# re: SWT中的日期选择控件  回复  更多评论

2007-07-12 12:08 by wanglin

这个是我在你的基础上改的

public class CalendarDialog implements MouseListener

{

private SimpleDateFormat stdDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm");

private SimpleDateFormat stdDate = new SimpleDateFormat("yyyy-MM-dd");

private String[][] week =

{

{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" },

{ "日", "一", "二", "三", "四", "五", "六" } };

private String[] hours =

{ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18",

"19", "20", "21", "22", "23" };

private String[] mins =

{ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18",

"19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36",

"37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54",

"55", "56", "57", "58", "59" };

private static Map widgetMap = new HashMap();

private Display display = null;

private Locale locale = Locale.CHINESE;

private Date nowDate = null; // current date

private Calendar now = null;

private Text selectedDate = null; // selected date

private boolean selectTime = false;

private Button hasTime;

private Text time;

private Shell shell = null;

private GridLayout gridLayout = null;

private GridData gridData = null;

private CLabel sunday = null;

private CLabel monday = null;

private CLabel tuesday = null;

private CLabel wednesday = null;

private CLabel thursday = null;

private CLabel friday = null;

private CLabel saturday = null;

private Button yearUp = null;

private Button yearNext = null;

private Button monthUp = null;

private Button monthNext = null;

private CLabel nowLabel = null;

private CLabel[] days = new CLabel[35];

private boolean hasChanged = false;

public CalendarDialog(Locale locale,boolean hasTime)

{

this.locale = locale;

this.selectTime = hasTime;

}

public CalendarDialog(Locale locale)

{

this(locale,false);

}

public CalendarDialog(boolean hasTime)

{

this(Locale.CHINESE,hasTime);

}

public CalendarDialog()

{

this(Locale.CHINESE,false);

}

private int getLastDayOfMonth(int year, int month)

{

if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)

{

return 31;

}

if (month == 4 || month == 6 || month == 9 || month == 11)

{

return 30;

}

if (month == 2)

{

if (isLeapYear(year))

{

return 29;

} else

{

return 28;

}

}

return 0;

}

public boolean isLeapYear(int year)

{

return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

}

private void moveTo(int type, int value)

{

Calendar now = Calendar.getInstance(); // get current Calendar object

now.setTime(nowDate); // set current date

now.add(type, value); // add to spec time.

nowDate = new Date(now.getTimeInMillis()); // result

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");// format

// date

nowLabel.setText(formatter.format(nowDate)); // set to label

setDayForDisplay(now);

}

private void setDayForDisplay(Calendar now)

{

int currentDay = now.get(Calendar.DATE);

now.add(Calendar.DAY_OF_MONTH, -(now.get(Calendar.DATE) - 1)); //

int startIndex = now.get(Calendar.DAY_OF_WEEK) - 1; //

int year = now.get(Calendar.YEAR); //

int month = now.get(Calendar.MONTH) + 1; //

int hourInt = now.get(Calendar.HOUR_OF_DAY);

int minInt = now.get(Calendar.MINUTE);

int lastDay = this.getLastDayOfMonth(year, month); //

int endIndex = startIndex + lastDay - 1; //

int startday = 1;

for (int i = 0; i < 35; i++)

{

Color temp = days[i].getBackground();

if (temp.equals(display.getSystemColor(SWT.COLOR_BLUE)))

{

days[i].setBackground(display.getSystemColor(SWT.COLOR_WHITE));

}

}

for (int i = 0; i < 35; i++)

{

if (i >= startIndex && i <= endIndex)

{

days[i].setText("" + startday);

if (startday == currentDay)

{

days[i].setBackground(display.getSystemColor(SWT.COLOR_BLUE)); //

}

startday++;

} else

{

days[i].setText("");

}

}

if(StringUtil.isStdDateTime(selectedDate.getText())){

hasTime.setSelection(true);

time.setText(hours[hourInt] + ":" + mins[minInt]);

}else{

hasTime.setSelection(false);

int hi = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);

int mi = Calendar.getInstance().get(Calendar.MINUTE);

time.setText(hours[hi] + ":" + mins[mi]);

}

}

public void previousYear()

{

moveTo(Calendar.YEAR, -1);

}

public void nextYear()

{

moveTo(Calendar.YEAR, 1);

}

public void nextMonth()

{

moveTo(Calendar.MONTH, 1);

}

public void previousMonth()

{

moveTo(Calendar.MONTH, -1);

}

public void mouseDoubleClick(MouseEvent e)

{

}

public void mouseDown(MouseEvent e)

{

if (widgetMap.get(e.getSource()) != null)

{

return;

}

widgetMap.put(e.getSource(), e.getSource());

selectedDate = (Text) e.getSource();

open(getX(), getY());

hasChanged = true;

}

private int getX()

{

int x = 0;

x += selectedDate.getBounds().x;

Scrollable par;

par = selectedDate.getParent();

while (par instanceof Scrollable && par != null)

{

x += par.getBounds().x;

par = par.getParent();

}

return x;

}

private int getY()

{

int y = 50;

y += selectedDate.getBounds().y;

y += selectedDate.getBounds().height;

Scrollable par;

par = selectedDate.getParent();

while (par instanceof Scrollable && par != null)

{

y += par.getBounds().y;

par = par.getParent();

}

return y;

}

public void mouseUp(MouseEvent e)

{

}

public void dayMouseDown(MouseEvent e)

{

CLabel day = (CLabel) e.getSource();

if (!day.getText().equals("") && !day.getText().equals("×"))

{

if (selectedDate == null)

{

widgetMap.remove(selectedDate);

this.shell.close();

}

this.selectedDate.setText(nowLabel.getText() + "-" + day.getText());

}

if (hasTime.getSelection())

{

isValidaTime("");

if (!day.getText().equals("") && !day.getText().equals("×"))

{

if (selectedDate == null)

{

widgetMap.remove(selectedDate);

this.shell.close();

}

this.selectedDate.setText(nowLabel.getText() + "-" + day.getText() + " " + time.getText());

}

}

widgetMap.remove(selectedDate);

this.shell.close();

hasChanged = true;

}

public void open(int x, int y)

{

display = Display.getDefault();

display.setWarnings(true);

shell = new Shell(display, SWT.ON_TOP);

hasChanged = false;

gridLayout = new GridLayout();

gridLayout.numColumns = 7;

gridLayout.makeColumnsEqualWidth = true;

shell.setLayout(gridLayout);

shell.setBounds(x, y, 210, 220);

gridData = new GridData(GridData.FILL_HORIZONTAL);

yearUp = new Button(shell, SWT.PUSH | SWT.FLAT);

yearUp.setText("

yearUp.setLayoutData(gridData);

yearUp.addSelectionListener(new SelectionAdapter()

{

public void widgetSelected(SelectionEvent e)

{

previousYear();

}

});

gridData = new GridData(GridData.FILL_HORIZONTAL);

monthUp = new Button(shell, SWT.PUSH | SWT.FLAT);

monthUp.setText("<

monthUp.setLayoutData(gridData);

monthUp.addSelectionListener(new SelectionAdapter()

{

public void widgetSelected(SelectionEvent e)

{

previousMonth();

}

});

nowLabel = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL);

gridData.horizontalSpan = 3;

nowLabel.setLayoutData(gridData);

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");

nowLabel.setText(formatter.format(new Date()));

gridData = new GridData(GridData.FILL_HORIZONTAL);

monthNext = new Button(shell, SWT.PUSH | SWT.FLAT);

monthNext.setText(">>");

monthNext.setLayoutData(gridData);

monthNext.addSelectionListener(new SelectionAdapter()

{

public void widgetSelected(SelectionEvent e)

{

nextMonth();

}

});

gridData = new GridData(GridData.FILL_HORIZONTAL);

yearNext = new Button(shell, SWT.PUSH | SWT.FLAT);

yearNext.setText(">");

yearNext.setLayoutData(gridData);

yearNext.addSelectionListener(new SelectionAdapter()

{

public void widgetSelected(SelectionEvent e)

{

nextYear();

}

});

sunday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

sunday.setLayoutData(gridData);

sunday.setText(getWeekName(0));

monday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

monday.setLayoutData(gridData);

monday.setText(getWeekName(1));

tuesday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

tuesday.setLayoutData(gridData);

tuesday.setText(getWeekName(2));

wednesday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

wednesday.setLayoutData(gridData);

wednesday.setText(getWeekName(3));

thursday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

thursday.setLayoutData(gridData);

thursday.setText(getWeekName(4));

friday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

friday.setLayoutData(gridData);

friday.setText(getWeekName(5));

saturday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

saturday.setLayoutData(gridData);

saturday.setText(getWeekName(6));

for (int i = 0; i < 35; i++)

{

days[i] = new CLabel(shell, SWT.FLAT | SWT.CENTER);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

days[i].setLayoutData(gridData);

days[i].addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

dayMouseDown(e);

}

});

}

hasTime = new Button(shell, SWT.CHECK);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

gridData.horizontalAlignment = GridData.CENTER;

hasTime.setLayoutData(gridData);

hasTime.setSelection(selectTime);

Composite timeCom = new Composite(shell, SWT.NONE);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

gridData.horizontalSpan = 5;

timeCom.setLayoutData(gridData);

{

GridLayout timeLayout = new GridLayout();

timeLayout.numColumns = 5;

gridLayout.makeColumnsEqualWidth = true;

timeCom.setLayout(timeLayout);

Composite lCom = new Composite(timeCom, SWT.NONE);

timeLayout = new GridLayout();

timeLayout.numColumns = 1;

lCom.setLayout(timeLayout);

{

CLabel hourUp = new CLabel(lCom, SWT.NONE);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

hourUp.setLayoutData(gridData);

hourUp.setText("∧");

hourUp.addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

nextHour();

}

});

CLabel hourDown = new CLabel(lCom, SWT.CENTER | SWT.EMBEDDED);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

hourDown.setLayoutData(gridData);

hourDown.setText("∨");

hourDown.addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

preHour();

}

});

}

{

time = new Text(timeCom, SWT.SINGLE | SWT.CENTER | SWT.BORDER);

gridData = new GridData(GridData.FILL_HORIZONTAL);

gridData.horizontalSpan = 3;

time.setLayoutData(gridData);

new ControlCheck().setTextTimeCheck1(time);

}

Composite rCom = new Composite(timeCom, SWT.NONE);

timeLayout = new GridLayout();

timeLayout.numColumns = 1;

rCom.setLayout(timeLayout);

{

CLabel minUp = new CLabel(rCom, SWT.FLAT | SWT.CENTER);

gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

minUp.setLayoutData(gridData);

minUp.setText("∧");

minUp.addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

nextMinute();

}

});

CLabel minDown = new CLabel(rCom, SWT.FLAT | SWT.CENTER);

GridData gridData = new GridData();

gridData.horizontalSpan = 3;

minDown.setLayoutData(gridData);

minDown.setText("∨");

minDown.addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

preMinute();

}

});

}

}

CLabel cls = new CLabel(shell, SWT.FLAT | SWT.CENTER);

GridData gridData = new GridData();

cls.setLayoutData(gridData);

cls.setText("×");

cls.addMouseListener(new MouseAdapter()

{

public void mouseDown(MouseEvent e)

{

dayMouseDown(e);

}

});

now = getCalendar();

nowDate = new Date(now.getTimeInMillis());

setDayForDisplay(now);

shell.open();

Display display = shell.getDisplay();

while (!shell.isDisposed())

{

if (!display.readAndDispatch())

{

display.sleep();

}

}

}

public boolean isChanged()

{

return hasChanged;

}

public String getDateText()

{

return selectedDate.toString();

}

private String getWeekName(int weekIndex)

{

if (locale.equals(Locale.CHINESE))

{

return week[1][weekIndex];

} else

{

return week[0][weekIndex];

}

}

private boolean isValidaTime(String time)

{

return true;

}

private void nextHour()

{

int textHour = getHourInText();

int textMinute = getMinuteInText();

if (textHour < 23)

{

time.setText(hours[textHour + 1] + ":" + mins[textMinute]);

} else

{

time.setText(hours[0]+ ":" + mins[textMinute]);

}

}

private void preHour()

{

int textHour = getHourInText();

int textMinute = getMinuteInText();

if (textHour > 0)

{

time.setText(hours[textHour - 1] + ":" + mins[textMinute]);

} else

{

time.setText(hours[23] + ":" + mins[textMinute]);

}

}

private void nextMinute()

{

int textHour = getHourInText();

int textMinute = getMinuteInText();

if (textMinute < 59)

{

time.setText(hours[textHour] + ":" + mins[textMinute + 1]);

} else

{

time.setText(hours[textHour] + ":" + mins[0]);

}

}

private void preMinute()

{

int textHour = getHourInText();

int textMinute = getMinuteInText();

if (textMinute > 0)

{

time.setText(hours[textHour] + ":" + mins[textMinute - 1]);

} else

{

time.setText(hours[textHour] + ":" + mins[59]);

}

}

private int getHourInText()

{

return new Integer(time.getText().split(":")[0]).intValue();

}

private int getMinuteInText()

{

return new Integer(time.getText().split(":")[1]).intValue();

}

private Calendar getCalendar()

{

Date d;

String timeStr = this.selectedDate.getText();

if (timeStr == null || timeStr.equals(""))

{

return Calendar.getInstance();

}

now = Calendar.getInstance();

if (StringUtil.isStdDateTime(timeStr))

{

try

{

d = this.stdDateTime.parse(timeStr);

now.setTime(d);

} catch (ParseException e)

{

e.printStackTrace();

}

}

if (StringUtil.isStdDate(timeStr))

{

try

{

d = this.stdDate.parse(timeStr);

now.setTime(d);

} catch (ParseException e)

{

e.printStackTrace();

}

}

return now;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值