?? zsdatetimetext.java
字號:
package wisesoft;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
/**
* <p>日期編輯控件 </p>
* <p>可選擇或直接輸入日期,日期格式有兩種:ZsDateTime.C_Date_Type 'YYYY-MM-DD'
* ZsDateTime.C_DateTime_Type 'YYYY-MM-DD hh24:mi:ss' </p>
* <p>Copyright: Copyright (wisesoft) 2003</p>
* <p>Company: </p>
* @bearking 熊運余 20050401
* @version 1.0
*/
public class ZsDateTimeText extends ZSComboTextField {//implements FocusListener
int iYear,iMonth,iDay,iHour=1,iMinute=1,iSecond=1;
BorderLayout borderLayout1 = new BorderLayout();
boolean bCheckFlag=true;//暫時解決執(zhí)行兩次失去焦點事件
private String dateText;
private int iDateType=ZsDateTime.C_DateTime_Type;
public ImageIcon buttonicon;//設置按鈕圖標
private transient Vector focusListeners;
public ZsDateTimeText() {
try {
jbInit();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
/**獲取時間*/
public String GetDate()
{
////C_Date_Type YYYY-MM-DD C_DateTime_Type YYYY-MM-DD hh24:mi:ss
if(iDateType==ZsDateTime.C_Date_Type)
{
return ZSCom_Func.addleftchar(String.valueOf(iYear),4,'0')+"-"+
ZSCom_Func.addleftchar(String.valueOf(iMonth),2,'0')+"-"+
ZSCom_Func.addleftchar(String.valueOf(iDay),2,'0');
}
else
{
return ZSCom_Func.addleftchar(String.valueOf(iYear),4,'0')+"-"+
ZSCom_Func.addleftchar(String.valueOf(iMonth),2,'0')+"-"+
ZSCom_Func.addleftchar(String.valueOf(iDay),2,'0')+" "+
ZSCom_Func.addleftchar(String.valueOf(iHour),2,'0')+":"+
ZSCom_Func.addleftchar(String.valueOf(iMinute),2,'0')+":"+
ZSCom_Func.addleftchar(String.valueOf(iSecond),2,'0');
}
}
//判定當前錄入日期是否正確
/**校驗字符串格式日期是否格式正確,iType=1 'YYYY-MM-DD' iType=2 'YYYY-MM-DD hh24:mi:ss'*/
public boolean check(String sDate,int iType)
{
try
{
String tmpStr = sDate.trim();
int iPos;
//判定類型如果是日期,則"-"為分隔符號
iPos = tmpStr.indexOf("-");
//取年
iYear = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
if(iYear>9999 || iYear<0) return false;
//取月
tmpStr = tmpStr.substring(iPos + 1, tmpStr.length());
iPos = tmpStr.indexOf("-");
iMonth = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
if(iMonth>12 || iMonth<0) return false;
//取日
tmpStr = tmpStr.substring(iPos + 1, tmpStr.length());
if (iType == ZsDateTime.C_Date_Type) {
iDay = ZSCom_Func.StringToInt(tmpStr);
if(iDay>31 || iDay<0) return false;//沒考慮特殊情況,做了簡要判定
return true;
}
else { //時間類型 hh24:mi:ss
iPos = tmpStr.indexOf(" ");
iDay = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
tmpStr = tmpStr.substring(iPos + 1, tmpStr.length()).trim();
iPos = tmpStr.indexOf(":");
//取小時
iHour = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
if(iHour>23 || iHour<0) return false;
//取分鐘
tmpStr = tmpStr.substring(iPos + 1, tmpStr.length());
iPos = tmpStr.indexOf(":");
iMinute = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
if(iMinute>59 || iMinute<0) return false;
//取秒
tmpStr = tmpStr.substring(iPos + 1, tmpStr.length());
iSecond = ZSCom_Func.StringToInt(tmpStr.substring(0, iPos));
if(iSecond>59 || iSecond<0) return false;
return true;
}
}
catch(Exception ex)
{
return false;
}
}
private void jbInit() throws Exception {
this.setEnabled(true);
m_imageSelect = new ImageIcon(testZsComboEdit.class.getResource("date.png"));
//this.addFocusListener(new ZsDateTimeText_this_focusAdapter(this));
this.addMouseListener(new ZsDateTimeText_this_mouseAdapter(this));
this.setFieldText("2005-12-12 12:12:12");
jTextField1.addFocusListener(new ZsDateTimeText_focusAdapter(this));
JButton1.setIcon(m_imageSelect);
//
}
/**得到日期文本,得到日期文本先調(diào)用check()檢驗日期是否正確*/
public String getDateText() {
dateText=jTextField1.getText();
return dateText;
}
/**設置日期文本*/
public void setDateText(String dateText) {
this.dateText = dateText;
}
/**得到日期類型,1='YYYY-MM-DD',2='YYYY-MM-DD hh24:mi:ss' */
public int getDateType() {
return iDateType;
}
/**設置日期類型,1='YYYY-MM-DD',2='YYYY-MM-DD hh24:mi:ss' */
public void setDateType(int DateType) {
this.iDateType = DateType;
}
/**判定一類名是否是Frame或Dlg*/
int isFrameOrDlg(String classname)//string,0,非,1,是Frame,2是Dialog
{
try
{
if (classname.indexOf("JDialog")>0)
{
return 1;
}
else if (classname.indexOf("JFrame")>0)
{
return 2;
}
return 0;
}
catch(Exception ex)
{
return 0;
}
}
/**得到一個容器的最上級容器*/
Container getPar(Container m_par)
{
try
{
if (isFrameOrDlg(m_par.getClass().getSuperclass().getName()) > 0) {
return m_par;
}
else return getPar(m_par.getParent());
}
catch (Exception ex)
{
return null;
}
}
/**彈出日期選擇窗口*/
void this_mouseClicked(MouseEvent e) {
ZsDateTime m_date;
Container m_parent=getPar(this.getParent());
//設置父窗體
if(m_parent!=null)
{
if (isFrameOrDlg(m_parent.getClass().getSuperclass().getName())==1)
{
m_date=new ZsDateTime((JDialog)getPar(this.getParent()),"請選擇日期",true);//Dialog
}
else
{
m_date=new ZsDateTime((JFrame)getPar(this.getParent()),"請選擇日期",true); //Frame
}
}
else m_date=new ZsDateTime();
m_date.iResultType=iDateType;
if(check(jTextField1.getText(),iDateType))
{
m_date.setDate(iYear,iMonth,iDay,iHour,iMinute,iSecond);
}
else
{
Calendar calendar = Calendar.getInstance();
m_date.setDate(calendar);
}
m_date.setSize(200,230);
m_date.setModal(true);
Dimension dimDlg = m_date.getSize();
m_date.iResultType=this.iDateType;
Point loc = this.getLocationOnScreen();
m_date.setLocation(loc.x,loc.y+this.getHeight());
m_date.showDate();
//m_date.setti
m_date.show();
this.jTextField1.setText(m_date.GetDate());
}
/**焦點失去,判斷文本是否合法日期*/
void jTextField1_focusLost(FocusEvent e) {
//暫時解決執(zhí)行兩次的問題
if(!bCheckFlag)
{
bCheckFlag=true;
return;
}
else bCheckFlag=false;
//
if(!check(jTextField1.getText(),iDateType))
{
if (iDateType==ZsDateTime.C_Date_Type)
{
ZSCom_Func.Showmessage("日期格式不對,標準格式是'YYYY-MM-DD',示例'2005-01-09'", "提示");
}
else
{
ZSCom_Func.Showmessage("日期格式不對,標準格式是'YYYY-MM-DD hh24:mi:ss',示例'2005-01-09 01:01:01'", "提示");
}
}
else
{
jTextField1.setText(GetDate()); //格式化日期
}
}
}
class ZsDateTimeText_this_mouseAdapter extends java.awt.event.MouseAdapter {
ZsDateTimeText adaptee;
ZsDateTimeText_this_mouseAdapter(ZsDateTimeText adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.this_mouseClicked(e);
}
}
class ZsDateTimeText_focusAdapter extends java.awt.event.FocusAdapter {
ZsDateTimeText adaptee;
ZsDateTimeText_focusAdapter(ZsDateTimeText adaptee) {
this.adaptee = adaptee;
}
public void focusLost(FocusEvent e) {
adaptee.jTextField1_focusLost(e);
}
}
//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -