2010-06-18 19 views
6

द्वारा स्क्रॉल करें, मुझे कुछ याद आ रहा है, लेकिन जीडब्ल्यूटी में डेटपिकर (मैं संस्करण 2.0.3 का उपयोग कर रहा हूं) आपको सालाना, केवल महीने तक स्क्रॉल करने की संभावना नहीं देता है। क्या मैं कुछ भूल रहा हूँ? मुझे पता है कि एक बाहरी lib (code.google.com/p/gwt-datepicker/) है जिसका उपयोग मैं कर सकता हूं, लेकिन मैं अभी तक एक और तृतीय पक्ष lib आयात करने से बचना चाहता हूं, जब आप डेटपिकर में ऐसा करने में सक्षम होना चाहिए जीडब्ल्यूटी मेंजीडब्ल्यूटी डेटपिकर, वर्ष

+1

में कुछ छोटे परिवर्तन करके संशोधित कर सकते हैं आप हमेशा अपनी खुद की कार्यक्षमता के कुछ जोड़ने के लिए विजेट का विस्तार कर सकते हैं। यह एक अच्छा फीचर अनुरोध हो सकता है। :) – markovuksanovic

+1

मैं इससे बचने की उम्मीद कर रहा था। हम्म ... – stuff22

उत्तर

8

आपको डेटपिकर उप-वर्ग बनाने की आवश्यकता होगी जो आपके महीने के चयनकर्ता के कार्यान्वयन का उपयोग करेगी।

वहाँ उदाहरण कोड के साथ, यह बहुत विषय पर GWT Google समूह पर हाल ही में धागा है:

Getting the default DateBox() picker to advance year at a time

2

मैं तुम्हें नीचे की तरह कुछ चाहता हूँ लगता है।

यहां मैंने जीडब्ल्यूटी डेटपिकर को महीने और साल के चयनकर्ता को जोड़ने के लिए संशोधित किया है। मैं 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(); 
    } 
}   
संबंधित मुद्दे