Me podría estar perdiendo algo, pero el DatePicker en GWT (estoy usando la versión 2.0.3) no le da la posibilidad de desplazarse hacia adelante y hacia atrás por año, solo mes. ¿Me estoy perdiendo de algo? Sé que hay una lib externa (code.google.com/p/gwt-datepicker/) que puedo usar, pero me gustaría evitar importar otra lib de terceros, cuando deberías poder hacer esto en el DatePicker proporcionado en GWT.GWT DatePicker, desplácese por año
6
A
Respuesta
8
Tendrá que crear una subclase DatePicker que use su propia implementación de MonthSelector.
Hay un hilo reciente en el grupo de Google GWT sobre este mismo tema, con el ejemplo de código:
Getting the default DateBox() picker to advance year at a time
2
pienso que usted quiere algo, como a continuación.
aquí He modificado GWT DatePicker para agregar el selector de mes y año en él. he especificado gama calendario hasta 2100, puede modificarlo de acuerdo a sus deseos haciendo pequeños cambios en ella
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("‹");
backwards.setStyleName(BASE_NAME + "PreviousButton");
forwards = new PushButton();
forwards.getUpFace().setHTML("›");
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("«");
backwardsYear.setStyleName(BASE_NAME + "PreviousButton");
forwardsYear = new PushButton();
forwardsYear.getUpFace().setHTML("»");
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();
}
}
Cuestiones relacionadas
- 1. jQuery UI - Datepicker - Ocultar año
- 2. jquery datepicker rango de año predeterminado
- 3. Ocultar campo de año en Android DatePicker?
- 4. jquery ui datepicker año siguiente y anterior
- 5. Mostrar un DatePicker con o sin el campo del año
- 6. Cómo ser seleccionado día/mes y año de jquery datepicker
- 7. jquery ui datepicker día/mes solamente, no año de selección
- 8. JQuery datepicker permite al usuario configurar el año
- 9. Problema con la barra desplegable de año en jQuery datepicker
- 10. días Contar por año
- 11. Obtener detalles de la fecha (día, mes, año) en GWT
- 12. Agrupar por año fiscal (Oracle)
- 13. Custom DatePicker
- 14. jQuery datepicker años mostrados
- 15. jQuery Desplácese a Div
- 16. UITextView, desplácese mientras edita?
- 17. Jquery datepicker años cambiar
- 18. MySQL Query GROUP POR día/mes/año
- 19. Django: Grupo por fecha (día, mes, año)
- 20. clasificación por mmyy (mes y año)
- 21. Agrupar por mes y año en MySQL
- 22. JQuery UI Datepicker, invierta el orden del año en los menús desplegables
- 23. Configurar Datepicker en IOS para seleccionar solo el mes y el año
- 24. jQuery UI Datepicker - Cómo alterar Datepicker HTML
- 25. TypeError: $ ("# datepicker"). Datepicker no es una función
- 26. Android DatePicker nombre Mes pantalla
- 27. Android WebView desplácese hacia abajo
- 28. Desplácese sobre polígonos (mostrando texto)
- 29. ASP.NET: Desplácese hasta el control
- 30. jQueryUI DatePicker Problemas YearRange y ChangeYear
Siempre se puede extender el widget para añadir un poco de su propia funcionalidad. Esta podría ser una buena solicitud de función. :) – markovuksanovic
Tenía la esperanza de evitar eso. Hmm ... – stuff22