2015-11-27 1 views
1

Я хочу иметь PopupDataField для изменения даты в моей форме и разделения часов и минут на компоненты NativeSelect. Итак, я хочу иметь дату, которая имеет год, месяц и день из PopupDataField и время от этих NativeSelects. Я не знаю, как сохранить это «дата» бв, когда я называюVaadin DataField

popupDateField.getValue() 

enter image description here Я reciving всю информацию с часов и минут, часто отличающуюся от этого на NativeSelects. Я пытался отключить сохранение час по

setResolution(Resolution.DAY); 

, но это не работает.

Я не знаю, как это сделать, может кто-нибудь мне помочь?

Я хочу иметь некоторые поля данных- где будет год, месяц день от DateField и час, минуты от NativeSelects

ответ

1

PopupDateField всегда будет возвращать Date объект в качестве значения, следовательно, вы будете получать от этого компонента часов и минут , Решение простое - просто игнорируйте их. Постройте свой Date или LocalDate объект со всех компонентов не только 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.

+0

Спасибо, ты мне очень помог! –

 Смежные вопросы

  • Нет связанных вопросов^_^