Java ——SWT利用DateTime获取日历控件
1、话不多说,先看效果图:
19是我选择的日期,其他功能就不一一介绍了,这个看你们自己。
2、Test01界面:
Test01代码如下:
package test;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.eltima.components.ui.DatePicker;
import com.yc.dialog_0301.MyDialog;
import org.eclipse.swt.widgets.Table;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.swing.JOptionPane;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Text;
/**
* 获取日历主界面
* @author lenovo
*
*/
public class Test01 {
protected Shell shell;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private static Text text;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
Test01 window = new Test01();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(611, 313);
shell.setText("日历选择");
Button btnHuoqu = new Button(shell, SWT.NONE);
//获取日历按钮
btnHuoqu.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Dialog_Calendar dialog=new Dialog_Calendar(shell,SWT.DIALOG_TRIM|SWT.APPLICATION_MODAL);
dialog.open();
}
});
btnHuoqu.setBounds(401, 120, 114, 34);
formToolkit.adapt(btnHuoqu, true, true);
btnHuoqu.setText("获取日历");
text = new Text(shell, SWT.BORDER);
text.setBounds(106, 122, 243, 30);
}
public static void setDate(String str){
System.out.println(str);
text.setText(str);
}
}
3、日历界面-- Dialog_Calendar界面:
Dialog_Calendar实现:
把DateTime控件拖拉进创建好的窗体,点击他的属性,更新其类型type(类型有calendar,date,time).有兴趣的小伙伴可以自己去实现一下,这里就只介绍我自己实现的
Dialog_Calendar代码如下:
package test;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.wb.swt.SWTResourceManager;
/**
* 日历弹窗
* @author lenovo
*
*/
public class Dialog_Calendar extends Dialog{
protected Object result;
protected Shell dialog;
private DateTime calendar;
private DateTime date;
private DateTime time;
private String selectedDate;// 选择的日期
private Display display;
/**
* Create the dialog.
* @param parent
* @param style
*/
public Dialog_Calendar(Shell parent, int style) {
super(parent, style);
setText("SWT Dialog");
}
/**
* Open the dialog.
* @return the result
*/
public Object open() {
createContents();
dialog.open();
dialog.layout();
display = getParent().getDisplay();
while (!dialog.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}
/**
* Create contents of the dialog.
*/
private void createContents() {
dialog = new Shell(getParent(),getStyle());
dialog.setSize(352, 333);
calendar = new DateTime(dialog, SWT.BORDER | SWT.CALENDAR);
calendar.setBounds(10, 10, 326, 233);
//监听日期选择
calendar.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDown(MouseEvent arg0) {
int month = (calendar.getMonth() + 1);
int day = calendar.getDay();
int hours = time.getHours();
int minutes = time.getMinutes();
int seconds=time.getSeconds();
//这个是直接打印出服务器自动生成的时间
// selectedDate=calendar.getYear()+"-"+month+"-"+calendar.getDay()+" "
// +hours+":"+minutes+":"+time.getSeconds();
//判断如果月,日,时,分,秒是小于10的就在前面加0,这里运用三元运算符进行判断
selectedDate = calendar.getYear() +"-" + (month<10?"0"+month:month)+
"-" + (day<10?"0"+day:day) + " " + (hours<10?"0"+hours:hours) + ":"+
(minutes<10?"0"+minutes:minutes) + ":"+(seconds<10?"0"+seconds:seconds);
//如果日历calendar上面切换月份,date的月份也跟着切换
if(calendar.getMonth()>date.getMonth()){
date.setMonth(calendar.getMonth());
}
if(calendar.getMonth()<date.getMonth()){
date.setMonth(calendar.getMonth());
}
}
@Override
public void mouseDoubleClick(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
date = new DateTime(dialog, SWT.LONG);
date.setBounds(10, 250, 135, 33);
//日期选择事件
date.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
//如果选择date年月,日历calendar的年月也会自动切换
if(date.getYear()>calendar.getYear()){
calendar.setYear(date.getYear());
}
if(date.getYear()<calendar.getYear()){
calendar.setYear(date.getYear());
}
if(date.getMonth()>calendar.getMonth()){
calendar.setMonth(date.getMonth());
}
if(date.getMonth()<calendar.getMonth()){
calendar.setMonth(date.getMonth());
}
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
}
});
time = new DateTime(dialog, SWT.TIME | SWT.LONG);
time.setToolTipText("");
time.setBounds(151, 250, 105, 33);
Button btnOk = new Button(dialog, SWT.NONE);
btnOk.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
//确定按钮
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
//System.out.println(selectedDate);
//将selectDate字符串传到Test01类下面的方法里面,方便Test调用
Test01.setDate(selectedDate);
}
});
btnOk.setBounds(268, 249, 68, 34);
btnOk.setText("OK");
}
}
以上就是我自己实现的功能。