2013-06-11 2 views
0

Как я могу прослушать изменение CalendarTextField в JFXtras? Например, новая дата выбора из меню выбора или введенная дата?JFXtras - Как добавить прослушиватель изменений в CalendarTextField?

date.addEventFilter(MouseEvent.ANY, new EventHandler<Event>() { 

     @Override 
     public void handle(Event arg0) { 
      System.out.println("EVENT"); 

     } 
    }); 

дает мне каждое движение мыши в поле. Я не нашел другой eventType, который имеет смысл.

Я также подумал о том, чтобы добавить этот фильтр событий в окно и проверить выбранную дату при каждом щелчке в окне. Но это не может быть правильным.

ответ

0

Я переработан календарь компонент в control с FXML, для захватывающего меню я использую XCalendarPicker и добавить к нему ChangeListener calendar() (который является собственностью). И когда дата меняется я обновить текстовое поле с новым Date

final XCalendarPicker calendarPicker = new XCalendarPicker(); 

final ChangeListener<Calendar> calendarListener = new ChangeListener<Calendar>() { 

      @Override 
      public void changed(ObservableValue<? extends Calendar> observable, Calendar oldValue, Calendar newValue) { 
       Date date = newValue.getTime(); 
       setDate(date); 
      } 
     }; 

     calendarPicker.calendar().addListener(calendarListener); 
+0

Спасибо! Какова была ваша причина не использовать CalendarTextField в JFXtras? Я уверен, что есть способ добавить к нему слушателя. – Steven

+0

Единственная причина, я не хочу, чтобы пользователь мог набирать там свою дату, они могут выбирать только из сборщика. но я уверен, что если добавить слушателя в свое текстовое поле, его можно будет отредактировать без проблем, вам просто нужно проверить, соответствует ли введенная дата вашим форматом dateformat. –

2

Alright, нашел его here:

date.valueProperty().addListener(new ChangeListener<Calendar>() { 
     @Override 
     public void changed(
       ObservableValue<? extends Calendar> observableValue, 
       Calendar oldValue, Calendar newValue) { 
      System.out.println(oldValue + " -> " + newValue); 
     } 
    }); 

Я не понимаю, что в FX слушатель должен быть установлен на а не компоненту, как в Swing.