Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于带有SWT.CALENDAR样式的DateTime小部件_Java_Datetime_Swt - Fatal编程技术网

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();}这里默认的月份和年份是日历小部件中默认选择的日期。请使用页面底部的“您的答案”字段。这将允许我们向上投票您的答案和您自己以接受您自己的答案。