Java 关于带有SWT.CALENDAR样式的DateTime小部件
如果您指的是Java 关于带有SWT.CALENDAR样式的DateTime小部件,java,datetime,swt,Java,Datetime,Swt,如果您指的是org.eclipse.SWT.widgets.DateTime它继承了addMouseListener,那么我们如何检测用户(使用鼠标)是在DateTime上以样式SWT.CALENDAR在月、日还是年单击了DateTime MouseListener接口具有以下方法: public void mouseClicked(MouseEvent evt) 并有以下方法: getX() getY() 因此,您可以在单击鼠标时获取鼠标的相对位置,并根据组件属性计算鼠标所在的元素。实际目
org.eclipse.SWT.widgets.DateTime
它继承了addMouseListener
,那么我们如何检测用户(使用鼠标)是在DateTime
上以样式SWT.CALENDAR在月、日还是年单击了DateTime
MouseListener
接口具有以下方法:
public void mouseClicked(MouseEvent evt)
并有以下方法:
getX()
getY()
因此,您可以在单击鼠标时获取鼠标的相对位置,并根据组件属性计算鼠标所在的元素。实际目的是获取所选日期并为单击日期处理日历弹出窗口,但在实现此功能时,问题是
即使我们点击年份或月份,日历也会被处理掉,不过我自己已经实现了,谢谢大家的回复
if(calendarWidget.getYear() == defaultYear && 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();
}
这里默认的月份和年份是日历小部件中默认选择的日期。基于Shiva回答,我又添加了一个条件。
如果您从当前月份以外的月份中选择一天,它将隐藏弹出窗口。例子:
您将看到三月弹出窗口,并选择四月的前几天之一
if((calendar.getYear() == defaultYear && calendar.getMonth() == defaultMonth) ||
(calendar.getYear() == defaultYear && calendar.getMonth() != defaultMonth && 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();
}
DateTime
使用本机控件显示日历(例如Mac OSX上的NSDatePicker
)。无法从X,Y位置识别本机控件的一部分。您可以检查正在运行的系统,并将结果调整为该系统。@KonradOliwer您真的想走这条路吗?这意味着每个操作系统(甚至是操作系统版本)都有一个单独的实现,每次出现新的操作系统版本时,您都可能需要对其进行更新。许多应用程序都要求与选定的操作系统兼容。所以这并不坏。我相信“硬法”比“无法”好。你能为我们解释一下这个用例吗?为什么您需要知道用户点击的确切内容,而不是只听点击事件,然后从小部件中轮询日期?实际目的是获取所选日期,并处理日历弹出窗口中的单击日期,但在实现这一点时,问题是日历即使在我们单击年份或月份时也会被处理,但是我自己实现了它。谢谢大家,对于您的响应,请在此处发布您的解决方案,以便其他人也可以从中受益。如果(calendarWidget.getYear()==defaultYear&&calendarWidget.getMonth()==defaultMonth){//这里我获取所选日期并将其保存为defaultYear=calendarWidget.getYear();defaultMonth=calendarWidget.getMonth();shell.dispose();}其他{defaultYear=calendarWidget.getYear();defaultMonth=calendarWidget.getMonth();}这里默认的月份和年份是日历小部件中默认选择的日期。请使用页面底部的“您的答案”字段。这将允许我们向上投票您的答案和您自己以接受您自己的答案。