Vaadin DataField

时间:2015-11-27 14:30:55

标签: java vaadin vaadin7

我想让PopupDataField更改表单中的日期,并通过NativeSelect组件分别更改小时和分钟。那么我想要一些日期,其中包含来自PopupDataField的年,月和日以及来自那些NativeSelects的时间。当我打电话

时,我不知道如何保存这个“约会”
popupDateField.getValue()

enter image description here 我用几小时和几分钟来收集整个数据,在NativeSelects上通常与此不同。 我试图通过

禁用保存小时
setResolution(Resolution.DAY);

但它不起作用。

我不知道怎么做,有人能帮助我吗?

我想要一些字段数据 - 其中ll是DateField的年,月日和小时,NativeSelects的分钟

1 个答案:

答案 0 :(得分:1)

PopupDateField将始终返回Date个对象作为其值,因此您将从小时和分钟收到此组件。解决方案很简单 - 只需忽略它们。从所有组件构建您的DateLocalDate对象,而不仅仅是PopupDateField

SSCCE

@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);
}

您还可以通过添加PopupDateField方法来扩展getLocalDate课程,该方法会将Date转换为LocalDate