⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zsdaycanvas.java

📁 DB日期编辑控件继承ZsDateTimeText
💻 JAVA
字号:
package support;

import javax.swing.JPanel;
import java.awt.LayoutManager;
import java.awt.*;
import javax.swing.UIManager;
import java.awt.event.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class ZsDayCanvas extends JPanel {
  private int iYear=2004,iMonth=12,iDay=12;
  int iPerWidth=24; //每个格子的宽度
  int iPerHeight=14;
  int iDayWidth=14; //选中框的宽度
  int itopStart=35;
  int ileftStart=15;
  int iNoInWeek=3;//
  int iDays=31;
  public ZsDayCanvas() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  public int getDay()
  {
    return iDay;
  }
  public void ChangeDay(int type)
  {

    //方向键
   if (type ==1)
   {
     //当前天-7
     if(iDay-7>=1)
     {
       iDay-=7;
       repaint();
     }
   }
   if (type == 2)
    {
      //当前天-7
      if(iDay+7<=iDays)
      {
        iDay+=7;
        repaint();
      }
    }
    if (type == 3)
     {
       //当前天-7
       if(iDay-1>=0)
       {
         iDay--;
         repaint();
       }
     }
     if (type == 4)
     {
        //当前天-7
        if(iDay+1<=iDays)
        {
          iDay++;
          repaint();
        }
     }
    repaint();
  }
  public void setDay(int year,int month,int day)
  {
    iYear=year;
    iMonth=month;
    iDay=day;
    iDays=DaysInMonth(year,month);
    iNoInWeek=DaysBetweenTwoDay(1,1,1,iYear,iMonth,1) % 7;

  }
  public void drawhead(Graphics2D g)
  {
      //写一、二、三、四、五、六、日
     int itopStart=15;
     int ileftStart=15;
     g.setColor(new Color(0,30,106));
     Font sFont = new Font("Dialog", 0,11);
     g.setFont(sFont);
     int i=0;
     g.drawString("一", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("二", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("三", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("四", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("五", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("六", ileftStart+i*iPerWidth, itopStart);
     i++;
     g.drawString("日", ileftStart+i*iPerWidth, itopStart);
     g.drawLine(ileftStart,itopStart+2,ileftStart+155,itopStart+2);
  }
  /**
     得到两个日期相差的天数
   */

  /**
   得到当前月的天数
    */

  public void paintComponent(Graphics g)
  {


    super.paintComponent(g);
    //写一、二、三、四、五、六、日
    Graphics2D g2 = (Graphics2D) g;
    drawhead(g2);
    drawDays(iDays,g2,itopStart,ileftStart);

  }
  /**月份总天数,星期几 */
  public void drawDays(int iDays,Graphics2D g2,int itopStart,
    int ileftStart)
  {
    g2.setColor(new Color(16,30,106));
    Font sFont = new Font("Dialog", 0,11);
    g2.setFont(sFont);
    int iLeftJust=-2;
    int iTopJust=-12;
    int x,y;
    for(int i=1;i<=iDays;i++)
    {
       //如果是iday,则绘制边框
       x=ileftStart + ((i+iNoInWeek-1)) % 7   * iPerWidth;
       y=((i+iNoInWeek-1)/ 7) * iPerHeight + itopStart;
       if (i==iDay)
       {
         g2.drawRect(x + iLeftJust, y + iTopJust, iDayWidth, iDayWidth);
       }
       g2.drawString(String.valueOf(i),x,y);
    }
  }
  private void jbInit() throws Exception {
    this.setForeground(UIManager.getColor("Tree.selectionBackground"));
    this.addKeyListener(new ZsDayCanvas_this_keyAdapter(this));
    this.addMouseListener(new ZsDayCanvas_this_mouseAdapter(this));
  }

  void this_mouseClicked(MouseEvent e) {
    //判定鼠标点击位置是否有日期,如果有,则改变当前天,重绘
    int x,y;
    int xMouse=e.getX();
    int yMouse=e.getY();
    for(int i=1;i<=31;i++)
    {
       //如果是iday,则绘制边框
       x=ileftStart + ((i+iNoInWeek-1)) % 7   * iPerWidth;
       y=((i+iNoInWeek-1)/ 7) * iPerHeight + itopStart;
       if ((x-1<xMouse)&&(xMouse<x+iPerWidth)&&(y+1>yMouse)&&(yMouse>y-iPerHeight))
       {
         iDay=i;
         repaint();
         return;
       }
    }
  }

  void this_keyPressed(KeyEvent e) {

  }

  /**
   * 判断是否闰年的函数
   *by wxf
   * @param iYear
   * @return int
   */
public int IsLeapYear(int iYear){
  if(iYear<0) return -1;
  else {
    if(iYear%4==0) return 1;
    else if(iYear%100!=0&&iYear%400==0) return 1;
    else return 0;

  }

  }
  /**
   * 判断某年某月有几天
   * by wxf
   * @param iYear
   * @param iMonth
   * @return
   */

  public int DaysInMonth(int iYear,int iMonth){
    int days=0;
    if(iYear<1||iMonth<1||iMonth>12) return -1;

  switch(iMonth){
       case 1: days=31;break;
         case 2:
           if(IsLeapYear(iYear)==0) days=28;
           else if(IsLeapYear(iYear)==1) days=29;
             break;
           case 3: days=31;break;
             case 4: days=30;break;
               case 5: days=31;break;
                 case 6:days=30;break;
                   case 7: days=31;break;
                     case 8: days=31;break;
                       case 9: days=30;break;
                         case 10:days=31;break;
                           case  11: days=30;break;
                             case 12: days=31;break;
      default:
      }
  return days;
  }
  /**
     * 判断某年有几天
     * by wxf
     * @param
     * @param
     * @return
     */

    public int DaysInYear(int iYear){
      int days=0;
      if(iYear<1) return -1;
      else if(IsLeapYear(iYear)==1) days=366;
        else days=365;

    return days;
    }

  /**
   * 判断两天之间相距的天数
   *by wxf
   * @param strAirline
   * @return
   */
  public int DaysBetweenTwoDay(int iYear,int iMonth,int iDay,int iYear1,int iMonth1,int iDay1){

  int iFirstDayTotalDays=0;
  int iSecondDayTotalDays=0;

  if(iYear<1||iMonth<1||iMonth>12||iDay<1||iDay>31) return -1;
  else if(iYear1<1||iMonth1<1||iMonth1>12||iDay1<1||iDay1>31) return -1;
  else{
    for(int i=1;i<iYear;i++) iFirstDayTotalDays+=DaysInYear(i);

    if(iMonth==1) iFirstDayTotalDays+=iDay;
      else{
        for (int i = 1; i < iMonth; i++) {
          iFirstDayTotalDays += DaysInMonth(iYear, i);
        }

        iFirstDayTotalDays += iDay;
      }

        for(int i=1;i<iYear1;i++) iSecondDayTotalDays+=DaysInYear(i);

        if(iMonth1==1) iSecondDayTotalDays+=iDay1;
          else{
            for (int i = 1; i < iMonth1; i++) {
              iSecondDayTotalDays += DaysInMonth(iYear1, i);
            }

            iSecondDayTotalDays += iDay1;
          }

      }
      return iFirstDayTotalDays>iSecondDayTotalDays?(iFirstDayTotalDays-iSecondDayTotalDays-1):(iSecondDayTotalDays-iFirstDayTotalDays-1);
    }
  }





class ZsDayCanvas_this_mouseAdapter extends java.awt.event.MouseAdapter {
  ZsDayCanvas adaptee;

  ZsDayCanvas_this_mouseAdapter(ZsDayCanvas adaptee) {
    this.adaptee = adaptee;
  }
  public void mouseClicked(MouseEvent e) {
    adaptee.this_mouseClicked(e);
  }
}

class ZsDayCanvas_this_keyAdapter extends java.awt.event.KeyAdapter {
  ZsDayCanvas adaptee;

  ZsDayCanvas_this_keyAdapter(ZsDayCanvas adaptee) {
    this.adaptee = adaptee;
  }
  public void keyPressed(KeyEvent e) {
    adaptee.this_keyPressed(e);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -