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");
    }


}
 

以上就是我自己实现的功能。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值