我需要一个数据字段
Vaadin DataField
我想要 PopupDataField 来更改我的表单中的日期,并通过 NativeSelect 组件单独更改小时和分钟。那么我想要一些日期,其中包含来自 PopupDataField 的年、月和日以及来自那些 NativeSelects 的时间。我不知道如何在调用
时保存这个 "date" bc
popupDateField.getValue()
我正在以小时和分钟的形式接收整个数据,通常与 NativeSelects 上的数据不同。
我试图通过
禁用节省时间
setResolution(Resolution.DAY);
但它不起作用。
我不知道该怎么做,有人可以帮助我吗?
我想要一些字段数据 - 其中是来自 DateField 的年、月、日和来自 NativeSelects 的小时、分钟
PopupDateField will always return Date object as its value hence you will receive from this component hours and minutes. The solution is simple - just ignore them. Construct your Date
or LocalDate 来自所有组件的对象而不仅仅是 PopupDateField
.
@Override
protected void init(VaadinRequest request) {
HorizontalLayout layout = new HorizontalLayout();
PopupDateField popupDateField = new PopupDateField();
NativeSelect hoursSelect = new NativeSelect("Hours");
for(int i=0; i<24; i++){
hoursSelect.addItem(i);
}
NativeSelect minutesSelect = new NativeSelect("Minutes");
for(int i=0; i<60; i++){
minutesSelect.addItem(i);
}
class MyValueChangeListener implements ValueChangeListener{
public void valueChange(ValueChangeEvent event) {
LocalDate date = popupDateField.getValue().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year = date.getYear();
int month = date.getMonth().getValue();
int days = date.getDayOfMonth();
int minutes = minutesSelect.getValue() == null ? 0 : (int) minutesSelect.getValue();
int hours = hoursSelect.getValue() == null ? 0 : (int) hoursSelect.getValue();
System.out.println(LocalDateTime.of(year, month, days, hours, minutes));
}
}
ValueChangeListener listener = new MyValueChangeListener();
minutesSelect.addValueChangeListener(listener);
hoursSelect.addValueChangeListener(listener);
popupDateField.addValueChangeListener(listener);
setContent(layout);
layout.addComponent(popupDateField);
layout.addComponent(hoursSelect);
layout.addComponent(minutesSelect);
}
您还可以通过添加 getLocalDate
方法来扩展 PopupDateField
class,该方法会将 Date
转换为 LocalDate
。
我想要 PopupDataField 来更改我的表单中的日期,并通过 NativeSelect 组件单独更改小时和分钟。那么我想要一些日期,其中包含来自 PopupDataField 的年、月和日以及来自那些 NativeSelects 的时间。我不知道如何在调用
时保存这个 "date" bcpopupDateField.getValue()
setResolution(Resolution.DAY);
但它不起作用。
我不知道该怎么做,有人可以帮助我吗?
我想要一些字段数据 - 其中是来自 DateField 的年、月、日和来自 NativeSelects 的小时、分钟
PopupDateField will always return Date object as its value hence you will receive from this component hours and minutes. The solution is simple - just ignore them. Construct your Date
or LocalDate 来自所有组件的对象而不仅仅是 PopupDateField
.
@Override
protected void init(VaadinRequest request) {
HorizontalLayout layout = new HorizontalLayout();
PopupDateField popupDateField = new PopupDateField();
NativeSelect hoursSelect = new NativeSelect("Hours");
for(int i=0; i<24; i++){
hoursSelect.addItem(i);
}
NativeSelect minutesSelect = new NativeSelect("Minutes");
for(int i=0; i<60; i++){
minutesSelect.addItem(i);
}
class MyValueChangeListener implements ValueChangeListener{
public void valueChange(ValueChangeEvent event) {
LocalDate date = popupDateField.getValue().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year = date.getYear();
int month = date.getMonth().getValue();
int days = date.getDayOfMonth();
int minutes = minutesSelect.getValue() == null ? 0 : (int) minutesSelect.getValue();
int hours = hoursSelect.getValue() == null ? 0 : (int) hoursSelect.getValue();
System.out.println(LocalDateTime.of(year, month, days, hours, minutes));
}
}
ValueChangeListener listener = new MyValueChangeListener();
minutesSelect.addValueChangeListener(listener);
hoursSelect.addValueChangeListener(listener);
popupDateField.addValueChangeListener(listener);
setContent(layout);
layout.addComponent(popupDateField);
layout.addComponent(hoursSelect);
layout.addComponent(minutesSelect);
}
您还可以通过添加 getLocalDate
方法来扩展 PopupDateField
class,该方法会将 Date
转换为 LocalDate
。