实现像网页上的那种用户单击一个Text框然后框下面出现一个日历控件,点击Text框以外的地方日历消失,怎么实现?
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class DateTimeDemo extends Shell
{
private static Display display;
private Text text;
public static void main(String args[])
{
try
{
display = Display.getDefault();
DateTimeDemo shell = new DateTimeDemo(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while(!shell.isDisposed())
{
if(!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public DateTimeDemo(Display display, int style)
{
super(display, style);
createContents();
}
protected void createContents()
{
setText("DateTime");
setSize(471, 140);
text = new Text(this, SWT.BORDER);
text.setEditable(false);
text.setBackground(new Color(display, 255, 255, 255));
text.setBounds(122, 41, 228, 25);
text.addMouseListener(new MouseAdapter()
{
public void mouseUp(MouseEvent e)
{
DTDialog dialog = DTDialog.getInstance(DateTimeDemo.this);
dialog.open();
}
});
}
public Point getDtLocation()
{
return new Point(text.getLocation().x + DateTimeDemo.this.getLocation().x,
text.getLocation().y + DateTimeDemo.this.getLocation().y + 60);
}
public void setDate(String str)
{
text.setText(str);
}
@Override
protected void checkSubclass()
{
// Disable the check that prevents subclassing of SWT components
}
}
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class DTDialog extends Dialog
{
private Object result;
private Shell shell;
private DateTime dateTime;
private DateTimeDemo parent;
private static DTDialog instance;
public static DTDialog getInstance(DateTimeDemo parent)
{
if(instance == null)
{
instance = new DTDialog(parent);
}
return instance;
}
private DTDialog(DateTimeDemo parent)
{
super(parent, SWT.NO_TRIM);
this.parent = parent;
}
public Object open()
{
if(shell == null || shell.isDisposed())
{
createContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
while(!shell.isDisposed())
{
if(!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
else
{
shell.setLocation(parent.getDtLocation());
shell.setVisible(true);
shell.setFocus();
}
return result;
}
protected void createContents()
{
shell = new Shell(getParent(), SWT.NO_TRIM);
shell.setLayout(new FillLayout());
shell.setSize(272, 140);
shell.setLocation(parent.getDtLocation());
shell.setText("SWT Dialog");
dateTime = new DateTime(shell, SWT.CALENDAR);
dateTime.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
parent.setDate(formatDt());
}
});
dateTime.addFocusListener(new FocusAdapter()
{
public void focusLost(FocusEvent e)
{
parent.setDate(formatDt());
shell.setVisible(false);
}
});
}
private String formatDt()
{
return dateTime.getYear() + "-" + dateTime.getMonth() + "-" + dateTime.getDay();
}
public Shell getShell()
{
return shell;
}
}
分享到:
相关推荐
8. **API接口**: 为了便于其他组件或服务使用这个日期控件,可能会提供一组公共方法,例如`show()`来弹出日历,`selectDate(Date date)`来设置或获取日期等。 开发这样一个控件需要深入理解Java编程,SWT或JFace库...
本文将详细介绍如何在SWT开发中实现一个简单的日历对话框,并将其与文本框结合使用,以方便用户选择日期。 #### 实现细节 ##### 1. 创建日历对话框 首先,我们需要创建一个`Shell`实例作为日历对话框的基础容器。...
通过实例化JFileChooser,设置其属性,然后调用showOpenDialog或showSaveDialog方法,可以弹出一个标准的文件选择对话框。 4. **SWT Designer设计的界面**:SWT(Standard Widget Toolkit)是另一个用于Java GUI...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
5. 弹出对话框:包含警告、确认、输入等多种对话框类型。 **jsFace - 支持MVC设计模式的框架** jsFace 是gara 的另一重要组件,它是一个基于Model-View-Controller(MVC)设计模式的JavaScript框架。MVC是一种软件...