#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. Многие приложения требуют совместимости с выбранной ОС. Так что это не так уж и плохо. Я считаю, что трудный путь лучше, чем никакой.