О виджете даты и времени в стиле SWT.CALENDAR

#java #datetime #swt

#java #дата и время #swt

Вопрос:

Как мы можем определить, нажал ли пользователь (с помощью мыши) на месяц, день или год DateTime с помощью стиля SWT.CALENDAR .

Комментарии:

1. Можете ли вы объяснить нам пример использования? Почему вам нужно знать, на что именно нажал пользователь, а не просто прослушивать события кликов в целом, а затем опрашивать дату из виджета?

2. Фактическая цель состояла в том, чтобы получить выбранную дату и удалить всплывающее окно календаря для одного щелчка по дате, но при реализации этой проблемы календарь удалялся, даже когда мы нажимаем на год или месяц, однако я сам это реализовал. спасибо всем за ваше согласие

3. Пожалуйста, опубликуйте свое решение здесь, чтобы другие тоже могли извлечь из него пользу.

4. if(calendarWidget.getYear() == defaultYear amp;amp; calendarWidget.getMonth() == defaultMonth) { // здесь я получаю выбранную дату и сохраняю ее defaultYear = calendarWidget.getYear(); defaultMonth = calendarWidget.getMonth(); shell.dispose(); } else { defaultYear= calendarWidget.getYear(); defaultMonth = calendarWidget.getMonth(); } здесь месяц и год по умолчанию являются выбранной датой по умолчанию в виджете календаря.

5. Пожалуйста, используйте поле «Ваш ответ» внизу страницы. Это позволит нам повысить ваш ответ и принять ваш собственный ответ.

Ответ №1:

Фактическая цель состояла в том, чтобы получить выбранную дату и удалить всплывающее окно календаря для одного щелчка по дате, но при реализации этой проблемы календарь удалялся, даже когда мы нажимаем на год или месяц, однако я сам это реализовал. спасибо всем за ваше согласие

 if(calendarWidget.getYear() == defaultYear amp;amp; calendarWidget.getMonth() == defaultMonth)
{
    //here i am getting the selected date and saving it
    defaultYear = calendarWidget.getYear();
    defaultMonth = calendarWidget.getMonth();
    shell.dispose();
}
else
{
    defaultYear = calendarWidget.getYear();
    defaultMonth = calendarWidget.getMonth();
}
 

здесь месяц и год по умолчанию являются выбранной датой по умолчанию в виджете календаря.

Ответ №2:

Основываясь на ответе Шивы, я добавил еще одно условие. Если вы выберете день из другого месяца, отличного от текущего, он скроет всплывающее окно. Пример: Вы видите всплывающее окно с мартом и выбираете один из первых дней апреля.

 if((calendar.getYear() == defaultYear amp;amp; calendar.getMonth() == defaultMonth) ||
                    (calendar.getYear() == defaultYear amp;amp; calendar.getMonth() != defaultMonth amp;amp; calendar.getDay() != defaultDay))
            {
                //here i am getting the selected date and saving it
                defaultYear = calendar.getYear();
                defaultMonth = calendar.getMonth();
                defaultDay = calendar.getDay();
                popup.dispose();
            }
            else
            {
                defaultYear = calendar.getYear();
                defaultMonth = calendar.getMonth();
                defaultDay = calendar.getDay();
            }
 

Ответ №3:

Если вы имеете org.eclipse.swt.widgets.DateTime в виду, что это наследуется addMouseListener .

MouseListener интерфейс имеет метод:

 public void mouseClicked(MouseEvent evt)
 

и у MouseEvent есть методы:

 getX()
getY()
 

Таким образом, вы можете получить относительное положение мыши при ее нажатии и вычислить, к какому элементу она относится, в зависимости от свойств компонента.

Комментарии:

1. DateTime используйте собственный элемент управления для отображения календаря (например NSDatePicker , в Mac OSX). Нет никакого способа идентифицировать часть собственного элемента управления по позиции X, Y.

2. Вы можете проверить, на какой системе вы работаете, и скорректировать результат в соответствии с этим.

3. @KonradOliwer Ты действительно хочешь пойти по этому пути? Это означало бы наличие отдельной реализации для каждой ОС (даже версий ОС), и вам пришлось бы потенциально обновлять ее каждый раз, когда появляется новая версия ОС.

4. Многие приложения требуют совместимости с выбранной ОС. Так что это не так уж и плохо. Я считаю, что трудный путь лучше, чем никакой.