Java GWT日期选择器,按年份滚动
我可能遗漏了一些东西,但是GWT中的日期选择器(我使用的是2.0.3版)不允许您按年份来回滚动,只能按月份滚动。我错过什么了吗?我知道我可以使用一个外部库(code.google.com/p/gwt-datepicker/),但我希望避免导入另一个第三方库,因为您应该能够在gwt中提供的datepicker中执行此操作 您需要创建一个DatePicker子类,该子类使用您自己的MonthSelector实现 GWT Google组最近发布了一条关于此主题的帖子,其中包含示例代码:Java GWT日期选择器,按年份滚动,java,gwt,Java,Gwt,我可能遗漏了一些东西,但是GWT中的日期选择器(我使用的是2.0.3版)不允许您按年份来回滚动,只能按月份滚动。我错过什么了吗?我知道我可以使用一个外部库(code.google.com/p/gwt-datepicker/),但我希望避免导入另一个第三方库,因为您应该能够在gwt中提供的datepicker中执行此操作 您需要创建一个DatePicker子类,该子类使用您自己的MonthSelector实现 GWT Google组最近发布了一条关于此主题的帖子,其中包含示例代码: 我想你想要下面
我想你想要下面这样的东西 在这里,我修改了GWT日期选择器,在其上添加了月份和年份选择器。 我指定的日历范围高达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("‹");
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();
}
}
import com.google.gwt.user.datepicker.client.CalendarModel;
导入com.google.gwt.user.datepicker.client.datepicker;
导入com.google.gwt.user.datepicker.client.DefaultCalendarView;
公共类DatePickerWithYearSelector或New extends DatePicker{
public Date PickerWithYearSelectorNew(){
超级(新的MontHandYear选择器或WithYear(),新的DefaultCalendarView(),
新日历模型());
MontHandYearSelector WithYear monthSelector=(MontHandYearSelector WithYear)
this.getMonthSelector();
monthSelector.setPicker(本);
monthSelector.setModel(this.getModel());
}
公共组件(){
super.refreshAll();
}
}
导入java.util.Date;
导入com.google.gwt.event.dom.client.ChangeEvent;
导入com.google.gwt.event.dom.client.ChangeHandler;
导入com.google.gwt.event.dom.client.ClickEvent;
导入com.google.gwt.event.dom.client.ClickHandler;
导入com.google.gwt.user.client.ui.Grid;
导入com.google.gwt.user.client.ui.ListBox;
导入com.google.gwt.user.client.ui.butdown;
导入com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
导入com.google.gwt.user.datepicker.client.CalendarModel;
导入com.google.gwt.user.datepicker.client.MonthSelector;
公共类MontHandYear选择器With Year extends Month选择器{
私有静态字符串BASE_NAME=“datePicker”;
私人按钮向后;
私人按钮转发;
私人按钮后置耳;
私家侦探;
私有电网;
private int previousYearColumn=0;
private int previousMonthColumn=1;
private int nextMonthColumn=4;
private int nextYearColumn=5;
私有日历模型;
使用YearSelector或New picker的private Date picker;
私有列表框monthListBox;
私有列表框;
公共MontHandYear选择器或WithYear(){
yearListBox=新列表框();
对于(int i=1900;i<2100;i++){
yearListBox.addItem(i+“”);
}
字符串[]项={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”,
“八月”、“九月”、“十月”、“十一月”、“十二月”};
monthListBox=新列表框();
对于(int i=0;i 否则,如果(model.getCurrentMonth().getMonth()您可以随时扩展小部件以添加一些您自己的功能。这可能是一个不错的功能请求。:)我希望避免这种情况。嗯。。。