📄 zsdaycanvas.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 + -