<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FGWT%2FDatePicker</id>
		<title>Java/GWT/DatePicker - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FGWT%2FDatePicker"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/GWT/DatePicker&amp;action=history"/>
		<updated>2026-04-22T21:12:08Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/GWT/DatePicker&amp;diff=7031&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/GWT/DatePicker&amp;diff=7031&amp;oldid=prev"/>
				<updated>2010-06-01T06:35:28Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:35, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/GWT/DatePicker&amp;diff=7030&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/GWT/DatePicker&amp;diff=7030&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== DatePicker with GNU license ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
From: http://code.google.ru/p/gwt-datepicker/&lt;br /&gt;
License: GNU Lesser public license!&lt;br /&gt;
&lt;br /&gt;
package com.jexp.gwt.client;&lt;br /&gt;
import com.google.gwt.i18n.client.*;&lt;br /&gt;
import com.google.gwt.user.client.*;&lt;br /&gt;
import com.google.gwt.user.client.ui.*;&lt;br /&gt;
import com.google.gwt.core.client.*;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
/**&lt;br /&gt;
 * Main class of the DatePicker. It extends the TextBox widget and manages a Date object.&lt;br /&gt;
 * When it is clicked, it opens a PopupCalendar on which we can select a new date. &amp;lt;br&amp;gt;&lt;br /&gt;
 * Example of use :  &amp;lt;br&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 * DatePicker datePicker = new DatePicker();&amp;lt;br&amp;gt;&lt;br /&gt;
 * RootPanel.get().add(datePicker);&amp;lt;br&amp;gt;&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * You can specify a theme (see the CSS file DatePickerStyle.css) and&lt;br /&gt;
 * the date to initialize the date picker.&lt;br /&gt;
 * Enjoy xD&lt;br /&gt;
 * @author Nicolas Wetzel (nicolas.wetzel@zenika.ru)&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 */&lt;br /&gt;
class DatePicker extends TextBox {&lt;br /&gt;
  private PopupCalendar popup;&lt;br /&gt;
  private Date date;&lt;br /&gt;
  private DateTimeFormat dateFormatter;&lt;br /&gt;
  &lt;br /&gt;
  {&lt;br /&gt;
    dateFormatter = DateUtil.getDateTimeFormat();&lt;br /&gt;
    popup = new PopupCalendar(this);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Default constructor. It creates a DatePicker which shows the current&lt;br /&gt;
   * month.&lt;br /&gt;
   */&lt;br /&gt;
  public DatePicker() {&lt;br /&gt;
    super();&lt;br /&gt;
    setText(&amp;quot;&amp;quot;);  &lt;br /&gt;
    sinkEvents(Event.ONCHANGE | Event.ONKEYPRESS);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Create a DatePicker which show a specific Date.&lt;br /&gt;
   * @param date Date to show&lt;br /&gt;
   */&lt;br /&gt;
  public DatePicker(Date date) {&lt;br /&gt;
    this();&lt;br /&gt;
    this.date = date;&lt;br /&gt;
    synchronizeFromDate();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Create a DatePicker which uses a specific theme.&lt;br /&gt;
   * @param theme Theme name&lt;br /&gt;
   */&lt;br /&gt;
  public DatePicker(String theme) {&lt;br /&gt;
    this();&lt;br /&gt;
    setTheme(theme);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Create a DatePicker which specifics date and theme.&lt;br /&gt;
   * @param date Date to show&lt;br /&gt;
   * @param theme Theme name&lt;br /&gt;
   */&lt;br /&gt;
  public DatePicker(Date date, String theme) {&lt;br /&gt;
    this();&lt;br /&gt;
    this.date = date;&lt;br /&gt;
    synchronizeFromDate();&lt;br /&gt;
    setTheme(theme);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return the Date contained in the DatePicker.&lt;br /&gt;
   * @return The Date&lt;br /&gt;
   */&lt;br /&gt;
  public Date getDate() {&lt;br /&gt;
    return date;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Set the Date of the datePicker and synchronize it with the display.&lt;br /&gt;
   * @param value&lt;br /&gt;
   */&lt;br /&gt;
  public void setDate(Date value) {&lt;br /&gt;
    this.date = value;&lt;br /&gt;
    synchronizeFromDate();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return the theme name.&lt;br /&gt;
   * @return Theme name&lt;br /&gt;
   */&lt;br /&gt;
  public String getTheme() {&lt;br /&gt;
    return popup.getTheme();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Set the theme name.&lt;br /&gt;
   * @param theme Theme name&lt;br /&gt;
   */&lt;br /&gt;
  public void setTheme(String theme) {&lt;br /&gt;
    popup.setTheme(theme);&lt;br /&gt;
  }&lt;br /&gt;
  public void onBrowserEvent(Event event) {&lt;br /&gt;
    switch (DOM.eventGetType(event)) {&lt;br /&gt;
      case Event.ONCLICK:&lt;br /&gt;
        showPopup();&lt;br /&gt;
      break;&lt;br /&gt;
      case Event.ONBLUR:&lt;br /&gt;
        popup.hidePopupCalendar();&lt;br /&gt;
      break;&lt;br /&gt;
      case Event.ONCHANGE:&lt;br /&gt;
        parseDate();&lt;br /&gt;
      break;&lt;br /&gt;
      case Event.ONKEYPRESS:&lt;br /&gt;
        if (DOM.eventGetKeyCode(event) == 13) {&lt;br /&gt;
          parseDate();&lt;br /&gt;
          showPopup();&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Display the date in the DatePicker.&lt;br /&gt;
   */&lt;br /&gt;
  public void synchronizeFromDate() {&lt;br /&gt;
    this.setText(dateFormatter.format(this.date));&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Display the PopupCalendar.&lt;br /&gt;
   */&lt;br /&gt;
  private void showPopup() {&lt;br /&gt;
    if (this.date != null) {&lt;br /&gt;
      popup.setDisplayedMonth(this.date);&lt;br /&gt;
    }&lt;br /&gt;
    popup.setPopupPosition(this.getAbsoluteLeft()+150, this.getAbsoluteTop());&lt;br /&gt;
    popup.displayMonth();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Parse the date entered in the DatePicker.&lt;br /&gt;
   */&lt;br /&gt;
  private void parseDate() {&lt;br /&gt;
    date = dateFormatter.parse(getText());&lt;br /&gt;
    synchronizeFromDate();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Popup used by the datePicker. It represents a calendar and allows the user to&lt;br /&gt;
 * select a date. It is localizable thanks to the DateTimerFormat class(GWT&lt;br /&gt;
 * class) and the DateLocale class.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Nicolas Wetzel (nicolas.wetzel@zenika.ru)&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 */&lt;br /&gt;
class PopupCalendar extends PopupPanel {&lt;br /&gt;
  private boolean leave;&lt;br /&gt;
  private String theme;&lt;br /&gt;
  private final DatePicker datePicker;&lt;br /&gt;
  private DateTimeFormat dayNameFormat;&lt;br /&gt;
  private DateTimeFormat monthFormat;&lt;br /&gt;
  private DateTimeFormat dayNumberFormat;&lt;br /&gt;
  private Label currentMonth;&lt;br /&gt;
  private Grid daysGrid;&lt;br /&gt;
  private Date displayedMonth;&lt;br /&gt;
  {&lt;br /&gt;
    this.leave = true;&lt;br /&gt;
    this.theme = &amp;quot;blue&amp;quot;;&lt;br /&gt;
    this.dayNameFormat = DateTimeFormat.getFormat(&amp;quot;E&amp;quot;);&lt;br /&gt;
    this.monthFormat = DateTimeFormat.getFormat(&amp;quot;MMMM yyyy&amp;quot;);&lt;br /&gt;
    this.dayNumberFormat = DateTimeFormat.getFormat(&amp;quot;d&amp;quot;);&lt;br /&gt;
    this.daysGrid = new Grid(7, 7);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Create a calendar popup. You have to call the displayMonth method to&lt;br /&gt;
   * display the the popup.&lt;br /&gt;
   * &lt;br /&gt;
   * @param datePicker&lt;br /&gt;
   *            The date picker on which the popup is attached&lt;br /&gt;
   */&lt;br /&gt;
  public PopupCalendar(DatePicker datePicker) {&lt;br /&gt;
    super(true);&lt;br /&gt;
    this.datePicker = datePicker;&lt;br /&gt;
    this.setStyleName(theme + &amp;quot;-date-picker&amp;quot;);&lt;br /&gt;
    VerticalPanel panel = new VerticalPanel();&lt;br /&gt;
    this.add(panel);&lt;br /&gt;
    sinkEvents(Event.ONBLUR);&lt;br /&gt;
    drawMonthLine(panel);&lt;br /&gt;
    drawWeekLine(panel);&lt;br /&gt;
    drawDayGrid(panel);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return the month displayed by the PopupCalendar.&lt;br /&gt;
   * @return a Date pointing to the month&lt;br /&gt;
   */&lt;br /&gt;
  public Date getDisplayedMonth() {&lt;br /&gt;
    return displayedMonth;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Set the month which is display by the PopupCalendar.&lt;br /&gt;
   * @param displayedMonth The Date to display&lt;br /&gt;
   */&lt;br /&gt;
  public void setDisplayedMonth(Date displayedMonth) {&lt;br /&gt;
    this.displayedMonth = displayedMonth;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return the theme used by the PopupCalendar.&lt;br /&gt;
   * @return Name of the theme&lt;br /&gt;
   */&lt;br /&gt;
  public String getTheme() {&lt;br /&gt;
    return this.theme;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Set the theme used by the PopupCalendar.&lt;br /&gt;
   * @param theme Name of the theme&lt;br /&gt;
   */&lt;br /&gt;
  public void setTheme(String theme) {&lt;br /&gt;
    this.theme = theme;&lt;br /&gt;
    this.setStyleName(theme + &amp;quot;-date-picker&amp;quot;);&lt;br /&gt;
  }  &lt;br /&gt;
  /**&lt;br /&gt;
   * Refresh the PopupCalendar and show it.&lt;br /&gt;
   */&lt;br /&gt;
  public void displayMonth() {&lt;br /&gt;
    if (this.displayedMonth == null) {&lt;br /&gt;
      if (datePicker.getDate() != null)&lt;br /&gt;
        this.displayedMonth = datePicker.getDate();&lt;br /&gt;
      else {&lt;br /&gt;
        this.displayedMonth = new Date();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    this.drawLabelMoisAnnee();&lt;br /&gt;
    this.drawDaysGridContent(this.displayedMonth);&lt;br /&gt;
    show();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method is destined to be used by the DatePicker in case of focus lost.&lt;br /&gt;
   * It creates a delay before the popup hides to allows the popup to catch&lt;br /&gt;
   * a click and eventually update the Date of the DatePicker.&lt;br /&gt;
   */&lt;br /&gt;
  public void hidePopupCalendar() {&lt;br /&gt;
    DeferredCommand.addCommand(new Command() {&lt;br /&gt;
      public void execute() {&lt;br /&gt;
        Timer t = new Timer() {&lt;br /&gt;
          public void run() {&lt;br /&gt;
            if (leave) {&lt;br /&gt;
              hide();&lt;br /&gt;
            } else {&lt;br /&gt;
              leave = true;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        };&lt;br /&gt;
        t.schedule(300);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Draw the monthLine with contains navigations buttons (change the month&lt;br /&gt;
   * and the year) and displayed the displayed month.&lt;br /&gt;
   * &lt;br /&gt;
   * @param panel&lt;br /&gt;
   *            The panel contained in the popup&lt;br /&gt;
   */&lt;br /&gt;
  private void drawMonthLine(Panel panel) {&lt;br /&gt;
    Grid monthLine = new Grid(1, 5);&lt;br /&gt;
    monthLine.setStyleName(theme + &amp;quot;-&amp;quot; + &amp;quot;month-line&amp;quot;);&lt;br /&gt;
    HTMLTable.CellFormatter monthCellFormatter = monthLine.getCellFormatter();&lt;br /&gt;
    Label previousYear = new Label(&amp;quot;?);&lt;br /&gt;
    previousYear.addClickListener(new ClickListener() {&lt;br /&gt;
      public void onClick(Widget sender) {&lt;br /&gt;
        leave = false;&lt;br /&gt;
        PopupCalendar.this.changeMonth(-12);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    monthLine.setWidget(0, 0, previousYear);&lt;br /&gt;
    Label previousMonth = new Label(&amp;quot;?);&lt;br /&gt;
    previousMonth.addClickListener(new ClickListener() {&lt;br /&gt;
      public void onClick(com.google.gwt.user.client.ui.Widget sender) {&lt;br /&gt;
        leave = false;&lt;br /&gt;
        PopupCalendar.this.changeMonth(-1);&lt;br /&gt;
      };&lt;br /&gt;
    });&lt;br /&gt;
    monthLine.setWidget(0, 1, previousMonth);&lt;br /&gt;
    monthCellFormatter.setWidth(0, 2, &amp;quot;60%&amp;quot;);&lt;br /&gt;
    currentMonth = new Label();&lt;br /&gt;
    currentMonth.addClickListener(new ClickListener() {&lt;br /&gt;
      public void onClick(Widget sender) {&lt;br /&gt;
        leave = false;&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    monthLine.setWidget(0, 2, currentMonth);&lt;br /&gt;
    Label nextMonth = new Label(&amp;quot;?);&lt;br /&gt;
    nextMonth.addClickListener(new ClickListener() {&lt;br /&gt;
      public void onClick(com.google.gwt.user.client.ui.Widget sender) {&lt;br /&gt;
        leave = false;&lt;br /&gt;
        PopupCalendar.this.changeMonth(1);&lt;br /&gt;
      };&lt;br /&gt;
    });&lt;br /&gt;
    monthLine.setWidget(0, 3, nextMonth);&lt;br /&gt;
    Label nextYear = new Label(&amp;quot;?);&lt;br /&gt;
    nextYear.addClickListener(new ClickListener() {&lt;br /&gt;
      public void onClick(Widget sender) {&lt;br /&gt;
        leave = false;&lt;br /&gt;
        PopupCalendar.this.changeMonth(12);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    monthLine.setWidget(0, 4, nextYear);&lt;br /&gt;
    panel.add(monthLine);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Draw the week line which displays first letter of week days. example : S&lt;br /&gt;
   * M T ....etc&lt;br /&gt;
   * &lt;br /&gt;
   * @param panel&lt;br /&gt;
   *            The panel contained in the popup&lt;br /&gt;
   */&lt;br /&gt;
  private void drawWeekLine(Panel panel) {&lt;br /&gt;
    Grid weekLine = new Grid(1, 7);&lt;br /&gt;
    weekLine.setStyleName(theme + &amp;quot;-&amp;quot; + &amp;quot;week-line&amp;quot;);&lt;br /&gt;
    Date weekFirstday = DateUtil.getWeekFirstDay();&lt;br /&gt;
    for (int i = 0; i &amp;lt; 7; i++) {&lt;br /&gt;
      weekLine.setText(0, i, dayNameFormat.format(&lt;br /&gt;
          DateUtil.addDays(weekFirstday, i)).substring(0, 1)&lt;br /&gt;
          .toUpperCase());&lt;br /&gt;
    }&lt;br /&gt;
    panel.add(weekLine);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Display the grid which contains the days. When a day is clicked, it&lt;br /&gt;
   * updates the Date contained in the DatePicker.&lt;br /&gt;
   * @param panel&lt;br /&gt;
   *            The panel contained in the popup&lt;br /&gt;
   */&lt;br /&gt;
  private void drawDayGrid(Panel panel) {&lt;br /&gt;
    this.daysGrid.addTableListener(new TableListener() {&lt;br /&gt;
      public void onCellClicked(SourcesTableEvents sender, int row,&lt;br /&gt;
          int cell) {&lt;br /&gt;
        Date selectedDay = DateUtil.addDays(&lt;br /&gt;
            getDaysGridOrigin(displayedMonth), row * 7 + cell);&lt;br /&gt;
        datePicker.setDate(selectedDay);&lt;br /&gt;
        datePicker.synchronizeFromDate();&lt;br /&gt;
        PopupCalendar.this.hide();&lt;br /&gt;
        leave = true;&lt;br /&gt;
      };&lt;br /&gt;
    });&lt;br /&gt;
    daysGrid.setStyleName(theme + &amp;quot;-&amp;quot; + &amp;quot;day-grid&amp;quot;);&lt;br /&gt;
    panel.add(daysGrid);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Update the Label which shows the displayed month (in the month line).&lt;br /&gt;
   */&lt;br /&gt;
  private void drawLabelMoisAnnee() {&lt;br /&gt;
    currentMonth&lt;br /&gt;
        .setText(monthFormat.format(this.displayedMonth).toLowerCase());&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Draw the days into the days grid. Days drawn are the days of the displayed month&lt;br /&gt;
   * and few days after and before the displayed month.&lt;br /&gt;
   * @param displayedMonth Date of the displayed month&lt;br /&gt;
   */&lt;br /&gt;
  private void drawDaysGridContent(Date displayedMonth) {&lt;br /&gt;
    HTMLTable.CellFormatter cfJours = daysGrid.getCellFormatter();&lt;br /&gt;
    Date cursor = this.getDaysGridOrigin(displayedMonth);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 7; i++) {&lt;br /&gt;
      for (int j = 0; j &amp;lt; 7; j++) {&lt;br /&gt;
        daysGrid.setText(i, j, dayNumberFormat.format(cursor));&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;selected&amp;quot;);&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
            + &amp;quot;current-month-selected&amp;quot;);&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;other-day&amp;quot;);&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
            + &amp;quot;current-month-other-day&amp;quot;);&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;week-end&amp;quot;);&lt;br /&gt;
        cfJours.removeStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
            + &amp;quot;current-month-week-end&amp;quot;);&lt;br /&gt;
        if (datePicker.getDate() != null&lt;br /&gt;
            &amp;amp;&amp;amp; DateUtil.areEquals(datePicker.getDate(), cursor))&lt;br /&gt;
          if (displayedMonth.getMonth() == cursor.getMonth())&lt;br /&gt;
            cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
                + &amp;quot;current-month-selected&amp;quot;);&lt;br /&gt;
          else&lt;br /&gt;
            cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;selected&amp;quot;);&lt;br /&gt;
        else if (DateUtil.isInWeekEnd(cursor))&lt;br /&gt;
          if (displayedMonth.getMonth() == cursor.getMonth())&lt;br /&gt;
            cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
                + &amp;quot;current-month-week-end&amp;quot;);&lt;br /&gt;
          else&lt;br /&gt;
            cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;week-end&amp;quot;);&lt;br /&gt;
        else if (displayedMonth.getMonth() == cursor.getMonth())&lt;br /&gt;
          cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot;&lt;br /&gt;
              + &amp;quot;current-month-other-day&amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
          cfJours.addStyleName(i, j, theme + &amp;quot;-&amp;quot; + &amp;quot;other-day&amp;quot;);&lt;br /&gt;
        cursor = DateUtil.addDays(cursor, 1);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Change the displayed month.&lt;br /&gt;
   * @param i Number of month to add to the displayed month&lt;br /&gt;
   */&lt;br /&gt;
  protected void changeMonth(int i) {&lt;br /&gt;
    this.displayedMonth = DateUtil.addMonths(this.displayedMonth, i);&lt;br /&gt;
    this.displayMonth();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return the first day to display. If the month first day is after the 5th&lt;br /&gt;
   * day of the week, it return the first day of the week. Else, it returns&lt;br /&gt;
   * the first day of the week before.&lt;br /&gt;
   * &lt;br /&gt;
   * @param displayedMonth&lt;br /&gt;
   * @return The first day to display in the grid&lt;br /&gt;
   */&lt;br /&gt;
  private Date getDaysGridOrigin(Date displayedMonth) {&lt;br /&gt;
    int currentYear = displayedMonth.getYear();&lt;br /&gt;
    int currentMonth = displayedMonth.getMonth();&lt;br /&gt;
    HTMLTable.CellFormatter cfJours = daysGrid.getCellFormatter();&lt;br /&gt;
    Date monthFirstDay = new Date(currentYear, currentMonth, 1);&lt;br /&gt;
    int indice = DateUtil.getWeekDayIndex(monthFirstDay);&lt;br /&gt;
    Date origineTableau;&lt;br /&gt;
    if (indice &amp;gt; 4) {&lt;br /&gt;
      origineTableau = DateUtil.getWeekFirstDay(monthFirstDay);&lt;br /&gt;
    } else {&lt;br /&gt;
      origineTableau = DateUtil.getWeekFirstDay(DateUtil.addDays(&lt;br /&gt;
          monthFirstDay, -7));&lt;br /&gt;
    }&lt;br /&gt;
    return origineTableau;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Utility class which ease the use of Date classes with the DatePicker.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Nicolas Wetzel (nicolas.wetzel@zenika.ru)&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
class DateUtil {&lt;br /&gt;
  /**&lt;br /&gt;
   * Add days to the Date object.&lt;br /&gt;
   * &lt;br /&gt;
   * @param date&lt;br /&gt;
   *            The Date to modify&lt;br /&gt;
   * @param days&lt;br /&gt;
   *            Number of day to add&lt;br /&gt;
   * @return The modified Date object&lt;br /&gt;
   */&lt;br /&gt;
  public static Date addDays(Date date, int days) {&lt;br /&gt;
    return new Date(date.getYear(), date.getMonth(), date.getDate() + days);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Add months to the Date object.&lt;br /&gt;
   * &lt;br /&gt;
   * @param date&lt;br /&gt;
   *            The Date to modify&lt;br /&gt;
   * @param months&lt;br /&gt;
   *            Number of month to add&lt;br /&gt;
   * @return The modified Date object&lt;br /&gt;
   */&lt;br /&gt;
  public static Date addMonths(Date date, int months) {&lt;br /&gt;
    return new Date(date.getYear(), date.getMonth() + months, date&lt;br /&gt;
        .getDate());&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Test if two Date objects represent the same day. It tests if the days,&lt;br /&gt;
   * the months and the years are equals.&lt;br /&gt;
   * &lt;br /&gt;
   * @param date1&lt;br /&gt;
   *            First Date&lt;br /&gt;
   * @param date2&lt;br /&gt;
   *            Second Date&lt;br /&gt;
   * @return true if the days are the same&lt;br /&gt;
   */&lt;br /&gt;
  public static boolean areEquals(Date date1, Date date2) {&lt;br /&gt;
    return date1.getDate() == date2.getDate()&lt;br /&gt;
        &amp;amp;&amp;amp; date1.getMonth() == date2.getMonth()&lt;br /&gt;
        &amp;amp;&amp;amp; date1.getYear() == date2.getYear();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return a Date object with represents the first day of a month contained&lt;br /&gt;
   * in another Date object.&lt;br /&gt;
   * &lt;br /&gt;
   * @param date The Date containing the month&lt;br /&gt;
   * @return The first day of the month&lt;br /&gt;
   */&lt;br /&gt;
  public static Date getMonthFirstDay(Date date) {&lt;br /&gt;
    Date current = date;&lt;br /&gt;
    while (current.getDate() != 1) {&lt;br /&gt;
      current = new Date(current.getYear(), current.getMonth(), current&lt;br /&gt;
          .getDate() - 1);&lt;br /&gt;
    }&lt;br /&gt;
    return current;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the place of the day in the week.&lt;br /&gt;
   * Example : sunday = 0, monday = 1 ....&lt;br /&gt;
   * Depends on the locale. &lt;br /&gt;
   * @param day The day&lt;br /&gt;
   * @return The place of the day&lt;br /&gt;
   */&lt;br /&gt;
  public static int getWeekDayIndex(Date day) {&lt;br /&gt;
    DateLocale locale = (DateLocale) GWT.create(DateLocale.class);&lt;br /&gt;
    int[] daysOrder = locale.getDAY_ORDER();&lt;br /&gt;
    int dayIndex = day.getDay();&lt;br /&gt;
    for (int i = 0; i &amp;lt; 7; i++) {&lt;br /&gt;
      if (dayIndex == daysOrder[i]) {&lt;br /&gt;
        return i;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the first day of the current week.&lt;br /&gt;
   * @return Date pointing to the first day &lt;br /&gt;
   */&lt;br /&gt;
  public static Date getWeekFirstDay() {&lt;br /&gt;
    return getWeekFirstDay(new Date());&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the first day of the week containing a Date object.&lt;br /&gt;
   * @param date The Date&lt;br /&gt;
   * @return The Date pointing to the first day&lt;br /&gt;
   */&lt;br /&gt;
  public static Date getWeekFirstDay(Date date) {&lt;br /&gt;
    Date current = date;&lt;br /&gt;
    DateLocale local = (DateLocale) GWT.create(DateLocale.class);&lt;br /&gt;
    int firstDay = local.getDAY_ORDER()[0];&lt;br /&gt;
    while (current.getDay() != firstDay) {&lt;br /&gt;
      current = new Date(current.getYear(), current.getMonth(), current&lt;br /&gt;
          .getDate() - 1);&lt;br /&gt;
    }&lt;br /&gt;
    return current;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Test if a day is a weekend day.&lt;br /&gt;
   * @param day The Date to test&lt;br /&gt;
   * @return true if the Date is a weekend day&lt;br /&gt;
   */&lt;br /&gt;
  public static boolean isInWeekEnd(Date day) {&lt;br /&gt;
    int dayIndex = day.getDay();&lt;br /&gt;
    return (dayIndex == 0 | dayIndex == 6) ? true : false;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Get the DateTimeFormat corresponding to the locale.&lt;br /&gt;
   * @return DateTimeFormat&lt;br /&gt;
   */&lt;br /&gt;
  public static DateTimeFormat getDateTimeFormat() {&lt;br /&gt;
    DateLocale locale = (DateLocale) GWT.create(DateLocale.class);&lt;br /&gt;
    DateTimeFormat format = locale.getDateTimeFormat();&lt;br /&gt;
    return format;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This interface is used to extend the localization property&lt;br /&gt;
 * of the DateTimeFormat of GWT. It adds the support of the days order &lt;br /&gt;
 * which is not the same in all countries. &lt;br /&gt;
 * It uses the Localizable interface. See GWT documentation for more detail.&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
interface DateLocale extends Localizable{&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Returns an array containing the order of days in the week.&lt;br /&gt;
   * For a week starting by the monday, it&amp;quot;ll return {1,2,3,4,5,6,0}.&lt;br /&gt;
   * @return Array of days index&lt;br /&gt;
   */&lt;br /&gt;
  public int[] getDAY_ORDER();&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return the DateTimeFormat corresponding to the date pattern used in&lt;br /&gt;
   * the country. For example : &amp;quot;dd/MM/yyyy&amp;quot; in France and &amp;quot;MM/dd/yyyy&amp;quot; in the US.&lt;br /&gt;
   * @return DateTimeFormat&lt;br /&gt;
   */&lt;br /&gt;
  public DateTimeFormat getDateTimeFormat();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * DateLocale implementation for US.&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
class DateLocale_ implements DateLocale {&lt;br /&gt;
  public int[] DAYS_ORDER = { 0, 1, 2, 3, 4, 5, 6 };&lt;br /&gt;
  public int[] getDAY_ORDER() {&lt;br /&gt;
    return DAYS_ORDER;&lt;br /&gt;
  }&lt;br /&gt;
  public DateTimeFormat getDateTimeFormat() {&lt;br /&gt;
    DateTimeFormat format = DateTimeFormat.getFormat(&amp;quot;MM/dd/yyyy&amp;quot;);&lt;br /&gt;
    return format;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * DateLocale implementation for UK.&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
class DateLocale_en_GB implements DateLocale {&lt;br /&gt;
  public int[] DAYS_ORDER = { 1, 2, 3, 4, 5, 6, 0 };&lt;br /&gt;
  public int[] getDAY_ORDER() {&lt;br /&gt;
    return DAYS_ORDER;&lt;br /&gt;
  }&lt;br /&gt;
  public DateTimeFormat getDateTimeFormat() {&lt;br /&gt;
    DateTimeFormat format = DateTimeFormat.getFormat(&amp;quot;dd/MM/yyyy&amp;quot;);&lt;br /&gt;
    return format;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * DateLocale implementation for french-speaking Canada.&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
class DateLocale_fr_CA implements DateLocale {&lt;br /&gt;
  public int[] DAYS_ORDER = { 0, 1, 2, 3, 4, 5, 6 };&lt;br /&gt;
  public int[] getDAY_ORDER() {&lt;br /&gt;
    return DAYS_ORDER;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public DateTimeFormat getDateTimeFormat() {&lt;br /&gt;
    DateTimeFormat format = DateTimeFormat.getFormat(&amp;quot;dd/MM/yyyy&amp;quot;);&lt;br /&gt;
    return format;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * DateLocale implementation for France.&lt;br /&gt;
 * @author Jean-Philippe Dournel&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
class DateLocale_fr implements DateLocale {&lt;br /&gt;
  &lt;br /&gt;
  public int[] DAYS_ORDER = { 1, 2, 3, 4, 5, 6, 0 };&lt;br /&gt;
  public int[] getDAY_ORDER() {&lt;br /&gt;
    return DAYS_ORDER;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public DateTimeFormat getDateTimeFormat() {&lt;br /&gt;
    DateTimeFormat format = DateTimeFormat.getFormat(&amp;quot;dd/MM/yyyy&amp;quot;);&lt;br /&gt;
    return format;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
public class GWTClient implements EntryPoint{&lt;br /&gt;
  public void onModuleLoad() {&lt;br /&gt;
    DatePicker datePicker = new DatePicker(&amp;quot;blue&amp;quot;);&lt;br /&gt;
    RootPanel.get().add(datePicker);&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simple Calendar Widget for GWT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
package com.jexp.gwt.client;&lt;br /&gt;
import com.google.gwt.core.client.*;&lt;br /&gt;
import com.google.gwt.user.client.*;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import com.google.gwt.user.client.ui.*;&lt;br /&gt;
public class GWTClient implements EntryPoint {&lt;br /&gt;
    FlowPanel fp = new FlowPanel();&lt;br /&gt;
  public GWTClient() {&lt;br /&gt;
        final CalendarWidget calendar = new CalendarWidget();&lt;br /&gt;
          calendar.addChangeListener(new ChangeListener() {&lt;br /&gt;
        &lt;br /&gt;
          public void onChange(Widget sender) {&lt;br /&gt;
            Window.alert(&amp;quot;Date selected: &amp;quot; + calendar.getDate());&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
     fp.add(calendar);&lt;br /&gt;
  }&lt;br /&gt;
  public void onModuleLoad() {&lt;br /&gt;
    RootPanel.get().add(fp);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
Simple Calendar Widget for GWT&lt;br /&gt;
Copyright (C) 2006 Alexei Sokolov http://gwt.ruponents.googlepages.ru/&lt;br /&gt;
This library is free software; you can redistribute it and/or&lt;br /&gt;
modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
License as published by the Free Software Foundation; either&lt;br /&gt;
version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
This library is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&lt;br /&gt;
Lesser General Public License for more details.&lt;br /&gt;
You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
License along with this library; if not, write to the Free Software&lt;br /&gt;
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA&lt;br /&gt;
*/ &lt;br /&gt;
//package com.gwt.ruponents.client;&lt;br /&gt;
&lt;br /&gt;
 class CalendarWidget extends Composite &lt;br /&gt;
    implements ClickListener, SourcesChangeEvents {&lt;br /&gt;
  private class NavBar extends Composite implements ClickListener{&lt;br /&gt;
    public final DockPanel bar = new DockPanel();&lt;br /&gt;
    public final Button prevMonth = new Button(&amp;quot;&amp;amp;lt;&amp;quot;, this);&lt;br /&gt;
    public final Button prevYear = new Button(&amp;quot;&amp;amp;lt;&amp;amp;lt;&amp;quot;, this);&lt;br /&gt;
    public final Button nextYear = new Button(&amp;quot;&amp;amp;gt;&amp;amp;gt;&amp;quot;, this);&lt;br /&gt;
    public final Button nextMonth = new Button(&amp;quot;&amp;amp;gt;&amp;quot;, this);&lt;br /&gt;
    public final HTML title = new HTML();&lt;br /&gt;
    private final CalendarWidget calendar;&lt;br /&gt;
    public NavBar(CalendarWidget calendar) {&lt;br /&gt;
      this.calendar = calendar;&lt;br /&gt;
      setWidget(bar);&lt;br /&gt;
      bar.setStyleName(&amp;quot;navbar&amp;quot;);&lt;br /&gt;
      title.setStyleName(&amp;quot;header&amp;quot;);&lt;br /&gt;
      HorizontalPanel prevButtons = new HorizontalPanel();&lt;br /&gt;
      prevButtons.add(prevMonth);&lt;br /&gt;
      prevButtons.add(prevYear);&lt;br /&gt;
      HorizontalPanel nextButtons = new HorizontalPanel();&lt;br /&gt;
      nextButtons.add(nextYear);&lt;br /&gt;
      nextButtons.add(nextMonth);&lt;br /&gt;
      bar.add(prevButtons, DockPanel.WEST);&lt;br /&gt;
      bar.setCellHorizontalAlignment(prevButtons, DockPanel.ALIGN_LEFT);&lt;br /&gt;
      bar.add(nextButtons, DockPanel.EAST);&lt;br /&gt;
      bar.setCellHorizontalAlignment(nextButtons, DockPanel.ALIGN_RIGHT);&lt;br /&gt;
      bar.add(title, DockPanel.CENTER);&lt;br /&gt;
      bar.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);&lt;br /&gt;
      bar.setCellHorizontalAlignment(title, HasAlignment.ALIGN_CENTER);&lt;br /&gt;
      bar.setCellVerticalAlignment(title, HasAlignment.ALIGN_MIDDLE);&lt;br /&gt;
      bar.setCellWidth(title, &amp;quot;100%&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public void onClick(Widget sender) {&lt;br /&gt;
      if (sender == prevMonth) {&lt;br /&gt;
        calendar.prevMonth();&lt;br /&gt;
      } else if (sender == prevYear) {&lt;br /&gt;
        calendar.prevYear();&lt;br /&gt;
      } else if (sender == nextYear) {&lt;br /&gt;
        calendar.nextYear();&lt;br /&gt;
      } else if (sender == nextMonth) {&lt;br /&gt;
        calendar.nextMonth();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static class CellHTML extends HTML {&lt;br /&gt;
    private int day;&lt;br /&gt;
       &lt;br /&gt;
    public CellHTML(String text, int day) {&lt;br /&gt;
      super(text);&lt;br /&gt;
      this.day = day;&lt;br /&gt;
    }&lt;br /&gt;
       &lt;br /&gt;
    public int getDay() {&lt;br /&gt;
      return day;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private final NavBar navbar = new NavBar(this);&lt;br /&gt;
  private final DockPanel outer = new DockPanel();&lt;br /&gt;
  private final Grid grid = new Grid(6, 7) {&lt;br /&gt;
    public boolean clearCell(int row, int column) {&lt;br /&gt;
      boolean retValue = super.clearCell(row, column);&lt;br /&gt;
           &lt;br /&gt;
      Element td = getCellFormatter().getElement(row, column);&lt;br /&gt;
      DOM.setInnerHTML(td, &amp;quot;&amp;quot;);&lt;br /&gt;
      return retValue;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  private Date date = new Date();&lt;br /&gt;
  private ChangeListenerCollection changeListeners;&lt;br /&gt;
   &lt;br /&gt;
  private String[] days = new String[] { &amp;quot;Sunday&amp;quot;, &amp;quot;Monday&amp;quot;, &amp;quot;Tuesday&amp;quot;,&lt;br /&gt;
      &amp;quot;Wednesday&amp;quot;, &amp;quot;Thursday&amp;quot;, &amp;quot;Friday&amp;quot;, &amp;quot;Saturday&amp;quot; };&lt;br /&gt;
  private String[] months = new String[] { &amp;quot;January&amp;quot;, &amp;quot;February&amp;quot;, &amp;quot;March&amp;quot;,&lt;br /&gt;
      &amp;quot;April&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;June&amp;quot;, &amp;quot;July&amp;quot;, &amp;quot;August&amp;quot;, &amp;quot;September&amp;quot;, &amp;quot;October&amp;quot;,&lt;br /&gt;
      &amp;quot;November&amp;quot;, &amp;quot;December&amp;quot; };&lt;br /&gt;
  public CalendarWidget() {&lt;br /&gt;
    setWidget(outer);&lt;br /&gt;
    grid.setStyleName(&amp;quot;table&amp;quot;);&lt;br /&gt;
    grid.setCellSpacing(0);&lt;br /&gt;
    outer.add(navbar, DockPanel.NORTH);&lt;br /&gt;
    outer.add(grid, DockPanel.CENTER);&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
    setStyleName(&amp;quot;CalendarWidget&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private void drawCalendar() {&lt;br /&gt;
    int year = getYear();&lt;br /&gt;
    int month = getMonth();&lt;br /&gt;
    int day = getDay();&lt;br /&gt;
    setHeaderText(year, month);&lt;br /&gt;
    grid.getRowFormatter().setStyleName(0, &amp;quot;weekheader&amp;quot;);&lt;br /&gt;
    for (int i = 0; i &amp;lt; days.length; i++) {&lt;br /&gt;
      grid.getCellFormatter().setStyleName(0, i, &amp;quot;days&amp;quot;);&lt;br /&gt;
      grid.setText(0, i, days[i].substring(0, 3));&lt;br /&gt;
    }&lt;br /&gt;
    Date now = new Date();&lt;br /&gt;
    int sameDay = now.getDate();&lt;br /&gt;
    int today = (now.getMonth() == month &amp;amp;&amp;amp; now.getYear()+1900 == year) ? sameDay : 0;&lt;br /&gt;
       &lt;br /&gt;
    int firstDay = new Date(year - 1900, month, 1).getDay();&lt;br /&gt;
    int numOfDays = getDaysInMonth(year, month);&lt;br /&gt;
    int j = 0;&lt;br /&gt;
    for (int i = 1; i &amp;lt; 6; i++) {&lt;br /&gt;
      for (int k = 0; k &amp;lt; 7; k++, j++) {&lt;br /&gt;
        int displayNum = (j - firstDay + 1);&lt;br /&gt;
        if (j &amp;lt; firstDay || displayNum &amp;gt; numOfDays) {&lt;br /&gt;
          grid.getCellFormatter().setStyleName(i, k, &amp;quot;empty&amp;quot;);&lt;br /&gt;
          grid.setHTML(i, k, &amp;quot;&amp;amp;nbsp;&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
          HTML html = new CellHTML(&lt;br /&gt;
            &amp;quot;&amp;lt;span&amp;gt;&amp;quot; + String.valueOf(displayNum) + &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;, &lt;br /&gt;
            displayNum);&lt;br /&gt;
          html.addClickListener(this);&lt;br /&gt;
          grid.getCellFormatter().setStyleName(i, k, &amp;quot;cell&amp;quot;);&lt;br /&gt;
          if (displayNum == today) {&lt;br /&gt;
            grid.getCellFormatter().addStyleName(i, k, &amp;quot;today&amp;quot;);&lt;br /&gt;
          } else if (displayNum == sameDay) {&lt;br /&gt;
            grid.getCellFormatter().addStyleName(i, k, &amp;quot;day&amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
          grid.setWidget(i, k, html);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  protected void setHeaderText(int year, int month) {&lt;br /&gt;
    navbar.title.setText(months[month] + &amp;quot;, &amp;quot; + year);&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  private int getDaysInMonth(int year, int month) {&lt;br /&gt;
    switch (month) {&lt;br /&gt;
      case 1:&lt;br /&gt;
        if ((year % 4 == 0 &amp;amp;&amp;amp; year % 100 != 0) || year % 400 == 0)&lt;br /&gt;
          return 29; // leap year&lt;br /&gt;
        else&lt;br /&gt;
          return 28;&lt;br /&gt;
      case 3:&lt;br /&gt;
        return 30;&lt;br /&gt;
      case 5:&lt;br /&gt;
        return 30;&lt;br /&gt;
      case 8:&lt;br /&gt;
        return 30;&lt;br /&gt;
      case 10:&lt;br /&gt;
        return 30;&lt;br /&gt;
      default:&lt;br /&gt;
        return 31;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void prevMonth() {&lt;br /&gt;
    int month = getMonth() - 1;&lt;br /&gt;
    if (month &amp;lt; 0) {&lt;br /&gt;
      setDate(getYear() - 1, 11, getDay());&lt;br /&gt;
    } else {&lt;br /&gt;
      setMonth(month);&lt;br /&gt;
    }&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
  }&lt;br /&gt;
  public void nextMonth() {&lt;br /&gt;
    int month = getMonth() + 1;&lt;br /&gt;
    if (month &amp;gt; 11) {&lt;br /&gt;
      setDate(getYear() + 1, 0, getDay());&lt;br /&gt;
    } else {&lt;br /&gt;
      setMonth(month);&lt;br /&gt;
    }&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  public void prevYear() {&lt;br /&gt;
    setYear(getYear() - 1);&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
  }&lt;br /&gt;
  public void nextYear() {&lt;br /&gt;
    setYear(getYear() + 1);&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
  }&lt;br /&gt;
  private void setDate(int year, int month, int day) {&lt;br /&gt;
    date = new Date(year - 1900, month, day);&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  private void setYear(int year) {&lt;br /&gt;
    date.setYear(year - 1900);&lt;br /&gt;
  }&lt;br /&gt;
  private void setMonth(int month) {&lt;br /&gt;
    date.setMonth(month);&lt;br /&gt;
  }&lt;br /&gt;
  public int getYear() {&lt;br /&gt;
    return 1900 + date.getYear();&lt;br /&gt;
  }&lt;br /&gt;
  public int getMonth() {&lt;br /&gt;
    return date.getMonth();&lt;br /&gt;
  }&lt;br /&gt;
  public int getDay() {&lt;br /&gt;
    return date.getDate();&lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  public Date getDate() {&lt;br /&gt;
    return date;&lt;br /&gt;
  }&lt;br /&gt;
  public void onClick(Widget sender) {&lt;br /&gt;
    CellHTML cell = (CellHTML)sender;&lt;br /&gt;
    setDate(getYear(), getMonth(), cell.getDay());&lt;br /&gt;
    drawCalendar();&lt;br /&gt;
    if (changeListeners != null) {&lt;br /&gt;
      changeListeners.fireChange(this);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void addChangeListener(ChangeListener listener) {&lt;br /&gt;
    if (changeListeners == null)&lt;br /&gt;
      changeListeners = new ChangeListenerCollection();&lt;br /&gt;
    changeListeners.add(listener);&lt;br /&gt;
  }&lt;br /&gt;
  public void removeChangeListener(ChangeListener listener) {&lt;br /&gt;
    if (changeListeners != null)&lt;br /&gt;
      changeListeners.remove(listener);&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
///&lt;br /&gt;
.CalendarWidget {&lt;br /&gt;
  border: 1px solid #ACA899;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .navbar {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #C3D9FF;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  border-bottom: 1px solid #ACA899;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .navbar .gwt-Button {&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .table {&lt;br /&gt;
  font: 10pt sans-serif;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .weekheader {&lt;br /&gt;
  background-color: #ACA899;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .weekheader .days {&lt;br /&gt;
  width: 3em;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .cell {&lt;br /&gt;
  cursor:pointer;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .cell .gwt-HTML {&lt;br /&gt;
  border: 1px solid #ACA899;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .cell .gwt-HTML span {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  line-height: 2em;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .today .gwt-HTML {&lt;br /&gt;
  background-color: #C3D9FF;&lt;br /&gt;
}&lt;br /&gt;
.CalendarWidget .day .gwt-HTML {&lt;br /&gt;
  border: 1px solid #C3D9FF;&lt;br /&gt;
} &lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>