2010-06-18 3 views
6

뭔가 빠졌을 수도 있지만 GWT의 DatePicker (버전 2.0.3 사용)는 한 달 전후로 스크롤 할 수있는 가능성을 제공하지 않습니다. 내가 놓친 게 있니? 외부 lib (code.google.com/p/gwt-datepicker/)를 사용할 수는 있지만, 제 3 자 lib를 가져 오는 것을 피하고 싶습니다. 제공된 DatePicker에서이 작업을 수행 할 수 있어야합니다. GWT에서.GWT DatePicker, 연도 별 스크롤

+1

에서 몇 가지 작은 변화를 만들어 당신의 소원에 따라 수정할 수 있습니다. 좋은 기능 요청 일 수 있습니다. :) – markovuksanovic

+1

나는 그것을 피하기를 바랬습니다. 흠 ... – stuff22

답변

2

난 당신이 다음과 같은 것을 할 생각합니다.

여기 GWT DatePicker를 수정하여 월 및 연도 선택기를 추가했습니다. I 2100 개까지 달력 범위를 지정, 당신은 당신은 항상 자신의 일부 기능을 추가하는 위젯을 확장 할 수 있습니다 그것은

import com.google.gwt.user.datepicker.client.CalendarModel; 
import com.google.gwt.user.datepicker.client.DatePicker; 
import com.google.gwt.user.datepicker.client.DefaultCalendarView; 
public class DatePickerWithYearSelectorNew extends DatePicker { 

    public DatePickerWithYearSelectorNew() { 
     super(new MonthAndYearSelectorWithYear(), new DefaultCalendarView(), 
       new CalendarModel()); 
    MonthAndYearSelectorWithYear monthSelector = (MonthAndYearSelectorWithYear)    
this.getMonthSelector(); 
     monthSelector.setPicker(this); 
      monthSelector.setModel(this.getModel()); 
    } 
    public void refreshComponents() { 
     super.refreshAll(); 
    } 
}  
import java.util.Date; 
import com.google.gwt.event.dom.client.ChangeEvent; 
import com.google.gwt.event.dom.client.ChangeHandler; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.ui.Grid; 
import com.google.gwt.user.client.ui.ListBox; 
import com.google.gwt.user.client.ui.PushButton; 
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter; 
import com.google.gwt.user.datepicker.client.CalendarModel; 
import com.google.gwt.user.datepicker.client.MonthSelector;  



public class MonthAndYearSelectorWithYear extends MonthSelector { 

    private static String BASE_NAME = "datePicker"; 
    private PushButton backwards; 
    private PushButton forwards; 
    private PushButton backwardsYear; 
    private PushButton forwardsYear; 
    private Grid grid; 
    private int previousYearColumn = 0; 
    private int previousMonthColumn = 1; 

    private int nextMonthColumn = 4; 
    private int nextYearColumn = 5; 
    private CalendarModel model; 
    private DatePickerWithYearSelectorNew picker; 

    private ListBox monthListBox; 
    private ListBox yearListBox; 

    public MonthAndYearSelectorWithYear() { 

     yearListBox = new ListBox(); 

     for (int i = 1900; i < 2100; i++) { 
      yearListBox.addItem(i + ""); 
     } 

     String[] items = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 
       "Aug", "Sep", "Oct", "Nov", "Dec" }; 

     monthListBox = new ListBox(); 

     for (int i = 0; i < items.length; i++) { 
      monthListBox.addItem(items[i]); 
     } 

    } 

    public void setModel(CalendarModel model) { 
     this.model = model; 
    } 

    public void setPicker(DatePickerWithYearSelectorNew picker) { 
     this.picker = picker; 
    } 

    @Override 
    protected void refresh() { 
     int monthIndex = getModel().getCurrentMonth().getMonth(); 
     monthListBox.setItemSelected(monthIndex, true); 
     int yearIndex = getModel().getCurrentMonth().getYear(); 
     // System.out.println(yearIndex); 
     yearListBox.setItemSelected(yearIndex, true); 
    } 

    @Override 
    protected void setup() { 
     // Set up backwards. 
     backwards = new PushButton(); 
     backwards.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       addMonths(-1); 
      } 
     }); 

     backwards.getUpFace().setHTML("&lsaquo;"); 
     backwards.setStyleName(BASE_NAME + "PreviousButton"); 

     forwards = new PushButton(); 
     forwards.getUpFace().setHTML("&rsaquo;"); 
     forwards.setStyleName(BASE_NAME + "NextButton"); 
     forwards.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       if (model.getCurrentMonth().getYear() < 199) { 
        addMonths(+1); 
       } 
       else if(model.getCurrentMonth().getMonth()<11 
            &&model.getCurrentMonth().getYear()==199) 
       { 
        addMonths(+1); 
       } 
      } 
     }); 

     // Set up backwards year 
     backwardsYear = new PushButton(); 
     backwardsYear.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 

       addMonths(-12); 
       picker.refreshComponents(); 
      } 
     }); 

     backwardsYear.getUpFace().setHTML("&laquo;"); 
     backwardsYear.setStyleName(BASE_NAME + "PreviousButton"); 

     forwardsYear = new PushButton(); 
     forwardsYear.getUpFace().setHTML("&raquo;"); 
     forwardsYear.setStyleName(BASE_NAME + "NextButton"); 
     forwardsYear.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       if (model.getCurrentMonth().getYear() < 199) { 
        addMonths(+12); 
        picker.refreshComponents(); 
       } 
      } 
     }); 

     yearListBox.addChangeHandler(new ChangeHandler() { 

      @Override 
      public void onChange(ChangeEvent event) { 
       // int yearIndex = yearListBox.getSelectedIndex(); 
       //  
       setYear(Integer.parseInt(yearListBox.getValue(yearIndex))); 
       setYear(yearListBox.getSelectedIndex()); 
      } 
     }); 
     monthListBox.addChangeHandler(new ChangeHandler() { 

      @Override 
      public void onChange(ChangeEvent event) { 
       int monthIndex = monthListBox.getSelectedIndex(); 
       setMonth(monthIndex); 
      } 
     }); 

     // Set up grid. 
     grid = new Grid(1, 6); 
     grid.setWidget(0, previousYearColumn, backwardsYear); 
     grid.setWidget(0, previousMonthColumn, backwards); 
     grid.setWidget(0, 2, monthListBox); 
     grid.setWidget(0, 3, yearListBox); 
     grid.setWidget(0, nextMonthColumn, forwards); 
     grid.setWidget(0, nextYearColumn, forwardsYear); 

     CellFormatter formatter = grid.getCellFormatter(); 

     formatter.setWidth(0, previousYearColumn, "1"); 
     formatter.setWidth(0, previousMonthColumn, "1"); 

     formatter.setWidth(0, nextMonthColumn, "1"); 
     formatter.setWidth(0, nextYearColumn, "1"); 
     grid.setStyleName(BASE_NAME + "MonthSelector"); 
     initWidget(grid); 
    } 

    public void addMonths(int numMonths) { 
     model.shiftCurrentMonth(numMonths); 
     picker.refreshComponents(); 
    } 

    @SuppressWarnings("deprecation") 
    public void setMonth(int month) { 
     Date tempMonth = new Date(); 
     tempMonth.setMonth(month); 

     model.setCurrentMonth(tempMonth); 
     picker.refreshComponents(); 
    } 

    @SuppressWarnings("deprecation") 
    public void setYear(int year) { 
     // to set year 
     model.getCurrentMonth().setYear(year); 
     picker.refreshComponents(); 
    } 
}