import java.applet.Applet;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarApplet extends Applet
{
static final int TOP=70;
static final int CELLWIDTH=50,CELLHEIGHT=30;
static final int MARGIN=3;
static final int FEBRUARY=1;
TextField tfYear=new TextField("2004",5);
Choice monthChoice=new Choice();
Button btUpdate=new Button("更新");
GregorianCalendar calendar=new GregorianCalendar();
Font smallFont=new Font("TimesRoman",Font.PLAIN,15);
Font bigFont=new Font("TimesRoman",Font.BOLD,50);
String days[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
String months[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
int daysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
int searchMonth,searchYear;
public void init()
{
setBackground(Color.white);
searchMonth=calendar.get(Calendar.MONTH);
searchYear=calendar.get(Calendar.YEAR);
add(new Label("年:"));
tfYear.setText(String.valueOf(searchYear));
add(tfYear);
add(new Label("月:"));
monthChoice.setFont(smallFont);
for(int i=0;i<12;i++)
{
monthChoice.addItem(months[i]);//增加下拉框选项
}
monthChoice.select(searchMonth);//设置下拉框当前选项
add(monthChoice);
add(btUpdate);
int componentCount=this.getComponentCount();//得到Applet中的组件数量
for(int i=0;i<componentCount;i++)
{
getComponent(i).setFont(smallFont);
}
}
public void paint(Graphics g)
{
FontMetrics fontMetric; //显示字体的FontMetrics对象
int fontAscent;
int dayPos;
int totalWidth,totalHeight;//总的宽度,高度
int numRows;
int xNum,yNum;
int numDays;
String dayStr;
int margin;
g.setColor(Color.lightGray);
g.setFont(bigFont);
g.drawString(searchYear+"年",60,TOP+70);
g.drawString((searchMonth+1)+"月",200,TOP+130);
g.setColor(Color.black);
g.setFont(smallFont);
fontMetric=g.getFontMetrics(); //获取初值变量
fontAscent=fontMetric.getAscent();
dayPos=TOP+fontAscent/2;
totalWidth=7*CELLWIDTH;
for(int i=0;i<7;i++)
{
g.drawString(days[i],(CELLWIDTH-fontMetric.stringWidth(days[i]))/2+i*CELLWIDTH,dayPos-20);//绘制表格标题栏
}
numRows=getNumberRows(searchYear,searchMonth);//计算所需要的行数量
totalHeight=numRows*CELLHEIGHT;
for(int i=0;i<=totalWidth;i+=CELLWIDTH)
{
g.drawLine(i,TOP,i,TOP+totalHeight);
}
for(int i=0,j=TOP;i<=numRows;i++,j+=CELLHEIGHT)
{
g.drawLine(0,j,totalWidth,j);
}
xNum=(getFirstDayOfMonth(searchYear,searchMonth)+1)*CELLWIDTH-MARGIN;
yNum=TOP+MARGIN+fontAscent;
numDays=daysInMonth[searchMonth]+((calendar.isLeapYear(searchYear)&&(searchMonth==FEBRUARY))?1:0);
for(int day=1;day<=numDays;day++)
{
dayStr=Integer.toString(day);
g.drawString(dayStr,xNum-fontMetric.stringWidth(dayStr),yNum);
//绘制字符串
xNum+=CELLWIDTH;
if(xNum>totalWidth)
{
xNum=CELLWIDTH-MARGIN;
yNum+=CELLHEIGHT;
}
}
}
public boolean action(Event e,Object o)
{
int searchYearInt;
if(e.target==btUpdate)
{
searchMonth=monthChoice.getSelectedIndex();//得到查询月份
searchYearInt=Integer.parseInt(tfYear.getText(),10);
if(searchYear>1581)
{
searchYear=searchYearInt;
}
repaint();
return true;
}
return false;
}
private int getNumberRows(int year,int month)
{
//得到行数量
int firstDay;
int numCells;
if(year<1582)
{
//年份小于1582,则返回-1
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfMonth(year,month);
if((month==FEBRUARY)&&(firstDay==0)&&!calendar.isLeapYear(year))
{
return 4;
}
numCells=firstDay+daysInMonth[month];
if((month==FEBRUARY)&&(calendar.isLeapYear(year)))
{
numCells++;
}
return((numCells<=35)?5:6);
}
private int getFirstDayOfMonth(int year,int month)
{
int firstDay;
int i;
if(year<1582)
{
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfYear(year);
for(i=0;i<month;i++)
{
firstDay+=daysInMonth[i];
}
if((month>FEBRUARY)&&calendar.isLeapYear(year))
{
firstDay++;
}
return(firstDay%7);
}
private int getFirstDayOfYear(int year)
{
int leapYears;
int hundreds;
int fourHundreds;
int first;
if(year<1582)
{
return(-1);
}
leapYears=(year-1581)/4;
hundreds=(year-1501)/100;
leapYears-=hundreds;
fourHundreds=(year-1201)/400;
leapYears+=fourHundreds;
first=5+(year-1582)+leapYears%7;
return first;
}
}
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarApplet extends Applet
{
static final int TOP=70;
static final int CELLWIDTH=50,CELLHEIGHT=30;
static final int MARGIN=3;
static final int FEBRUARY=1;
TextField tfYear=new TextField("2004",5);
Choice monthChoice=new Choice();
Button btUpdate=new Button("更新");
GregorianCalendar calendar=new GregorianCalendar();
Font smallFont=new Font("TimesRoman",Font.PLAIN,15);
Font bigFont=new Font("TimesRoman",Font.BOLD,50);
String days[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
String months[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
int daysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
int searchMonth,searchYear;
public void init()
{
setBackground(Color.white);
searchMonth=calendar.get(Calendar.MONTH);
searchYear=calendar.get(Calendar.YEAR);
add(new Label("年:"));
tfYear.setText(String.valueOf(searchYear));
add(tfYear);
add(new Label("月:"));
monthChoice.setFont(smallFont);
for(int i=0;i<12;i++)
{
monthChoice.addItem(months[i]);//增加下拉框选项
}
monthChoice.select(searchMonth);//设置下拉框当前选项
add(monthChoice);
add(btUpdate);
int componentCount=this.getComponentCount();//得到Applet中的组件数量
for(int i=0;i<componentCount;i++)
{
getComponent(i).setFont(smallFont);
}
}
public void paint(Graphics g)
{
FontMetrics fontMetric; //显示字体的FontMetrics对象
int fontAscent;
int dayPos;
int totalWidth,totalHeight;//总的宽度,高度
int numRows;
int xNum,yNum;
int numDays;
String dayStr;
int margin;
g.setColor(Color.lightGray);
g.setFont(bigFont);
g.drawString(searchYear+"年",60,TOP+70);
g.drawString((searchMonth+1)+"月",200,TOP+130);
g.setColor(Color.black);
g.setFont(smallFont);
fontMetric=g.getFontMetrics(); //获取初值变量
fontAscent=fontMetric.getAscent();
dayPos=TOP+fontAscent/2;
totalWidth=7*CELLWIDTH;
for(int i=0;i<7;i++)
{
g.drawString(days[i],(CELLWIDTH-fontMetric.stringWidth(days[i]))/2+i*CELLWIDTH,dayPos-20);//绘制表格标题栏
}
numRows=getNumberRows(searchYear,searchMonth);//计算所需要的行数量
totalHeight=numRows*CELLHEIGHT;
for(int i=0;i<=totalWidth;i+=CELLWIDTH)
{
g.drawLine(i,TOP,i,TOP+totalHeight);
}
for(int i=0,j=TOP;i<=numRows;i++,j+=CELLHEIGHT)
{
g.drawLine(0,j,totalWidth,j);
}
xNum=(getFirstDayOfMonth(searchYear,searchMonth)+1)*CELLWIDTH-MARGIN;
yNum=TOP+MARGIN+fontAscent;
numDays=daysInMonth[searchMonth]+((calendar.isLeapYear(searchYear)&&(searchMonth==FEBRUARY))?1:0);
for(int day=1;day<=numDays;day++)
{
dayStr=Integer.toString(day);
g.drawString(dayStr,xNum-fontMetric.stringWidth(dayStr),yNum);
//绘制字符串
xNum+=CELLWIDTH;
if(xNum>totalWidth)
{
xNum=CELLWIDTH-MARGIN;
yNum+=CELLHEIGHT;
}
}
}
public boolean action(Event e,Object o)
{
int searchYearInt;
if(e.target==btUpdate)
{
searchMonth=monthChoice.getSelectedIndex();//得到查询月份
searchYearInt=Integer.parseInt(tfYear.getText(),10);
if(searchYear>1581)
{
searchYear=searchYearInt;
}
repaint();
return true;
}
return false;
}
private int getNumberRows(int year,int month)
{
//得到行数量
int firstDay;
int numCells;
if(year<1582)
{
//年份小于1582,则返回-1
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfMonth(year,month);
if((month==FEBRUARY)&&(firstDay==0)&&!calendar.isLeapYear(year))
{
return 4;
}
numCells=firstDay+daysInMonth[month];
if((month==FEBRUARY)&&(calendar.isLeapYear(year)))
{
numCells++;
}
return((numCells<=35)?5:6);
}
private int getFirstDayOfMonth(int year,int month)
{
int firstDay;
int i;
if(year<1582)
{
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfYear(year);
for(i=0;i<month;i++)
{
firstDay+=daysInMonth[i];
}
if((month>FEBRUARY)&&calendar.isLeapYear(year))
{
firstDay++;
}
return(firstDay%7);
}
private int getFirstDayOfYear(int year)
{
int leapYears;
int hundreds;
int fourHundreds;
int first;
if(year<1582)
{
return(-1);
}
leapYears=(year-1581)/4;
hundreds=(year-1501)/100;
leapYears-=hundreds;
fourHundreds=(year-1201)/400;
leapYears+=fourHundreds;
first=5+(year-1582)+leapYears%7;
return first;
}
}
解决方案 »
- 点击“文件”——“打开”或“保存”,出现一个“请选择文件“或”另存为”的框,不选择文件,然后直接关闭,会抛出空指针异常,这个怎么处理??
- JFrame问题
- 请教 java 制作安装文件
- 问一下~~有个小问题不太懂,谁教我一下~~~~
- 请教关于paint
- 往数据库中添加记录后遇到的问题
- 哪位大侠可以提供软件licence制作的相关技术文章链接
- Java GUI开发使用的技术
- 请问谁能解释一下JAVA中的JAVA.util.Collection、Enumination 、Vector、 Hashtable
- 关于成员对象的输出问题!请指教!
- 继承类怎么添加ChangeListener
- 大家帮忙看看为什么我的面板不显示内容
package cn.example;import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Container;
import java.awt.Event;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarDemo {
public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame =new launchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class launchFrame extends JFrame {
static final int TOP=70;
static final int CELLWIDTH=50,CELLHEIGHT=30;
static final int MARGIN=3;
static final int FEBRUARY=1;
JPanel pan1,pan2;
TextField tfYear=new TextField("2004",5);
Choice monthChoice=new Choice();
Button btUpdate=new Button("更新");
GregorianCalendar calendar=new GregorianCalendar();
Font smallFont=new Font("TimesRoman",Font.PLAIN,15);
Font bigFont=new Font("TimesRoman",Font.BOLD,50);
String days[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
String months[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
int daysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
int searchMonth,searchYear;
public launchFrame()
{
setTitle("Calendar");
setBounds(0,0,600,600);
Container container=getContentPane();
pan1=new JPanel();
pan2=new JPanel();
container.add(pan1,new BorderLayout().NORTH);
pan1.setLayout(new FlowLayout(10));
setBackground(Color.white);
searchMonth=calendar.get(Calendar.MONTH);
searchYear=calendar.get(Calendar.YEAR);
pan1.add(new Label("年:"));
tfYear.setText(String.valueOf(searchYear));
pan1.add(tfYear);
pan1.add(new Label("月:"));
monthChoice.setFont(smallFont);
for(int i=0;i<12;i++)
{
monthChoice.addItem(months[i]);//增加下拉框选项
}
monthChoice.select(searchMonth);//设置下拉框当前选项
pan1.add(monthChoice);
pan1.add(btUpdate);
int componentCount=this.getComponentCount();//得到Applet中的组件数量
for(int i=0;i<componentCount;i++)
{
getComponent(i).setFont(smallFont);
}
}
public void paint(Graphics g)
{
FontMetrics fontMetric; //显示字体的FontMetrics对象
int fontAscent;
int dayPos;
int totalWidth,totalHeight;//总的宽度,高度
int numRows;
int xNum,yNum;
int numDays;
String dayStr;
int margin;
g.setColor(Color.lightGray);
g.setFont(bigFont);
g.drawString(searchYear+"年",60,TOP+70);
g.drawString((searchMonth+1)+"月",200,TOP+130);
g.setColor(Color.black);
g.setFont(smallFont);
fontMetric=g.getFontMetrics(); //获取初值变量
fontAscent=fontMetric.getAscent();
dayPos=TOP+fontAscent/2;
totalWidth=7*CELLWIDTH;
for(int i=0;i<7;i++)
{
g.drawString(days[i],(CELLWIDTH-fontMetric.stringWidth(days[i]))/2+i*CELLWIDTH,dayPos-20);//绘制表格标题栏
}
numRows=getNumberRows(searchYear,searchMonth);//计算所需要的行数量
totalHeight=numRows*CELLHEIGHT;
for(int i=0;i<=totalWidth;i+=CELLWIDTH)
{
g.drawLine(i,TOP,i,TOP+totalHeight);
}
for(int i=0,j=TOP;i<=numRows;i++,j+=CELLHEIGHT)
{
g.drawLine(0,j,totalWidth,j);
}
xNum=(getFirstDayOfMonth(searchYear,searchMonth)+1)*CELLWIDTH-MARGIN;
yNum=TOP+MARGIN+fontAscent;
numDays=daysInMonth[searchMonth]+((calendar.isLeapYear(searchYear)&&(searchMonth==FEBRUARY))?1:0);
for(int day=1;day<=numDays;day++)
{
dayStr=Integer.toString(day);
g.drawString(dayStr,xNum-fontMetric.stringWidth(dayStr),yNum);
//绘制字符串
xNum+=CELLWIDTH;
if(xNum>totalWidth)
{
xNum=CELLWIDTH-MARGIN;
yNum+=CELLHEIGHT;
}
}
}
public boolean action(Event e,Object o)
{
int searchYearInt;
if(e.target==btUpdate)
{
searchMonth=monthChoice.getSelectedIndex();//得到查询月份
searchYearInt=Integer.parseInt(tfYear.getText(),10);
if(searchYear>1581)
{
searchYear=searchYearInt;
}
repaint();
return true;
}
return false;
}
private int getNumberRows(int year,int month)
{
//得到行数量
int firstDay;
int numCells;
if(year<1582)
{
//年份小于1582,则返回-1
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfMonth(year,month);
if((month==FEBRUARY)&&(firstDay==0)&&!calendar.isLeapYear(year))
{
return 4;
}
numCells=firstDay+daysInMonth[month];
if((month==FEBRUARY)&&(calendar.isLeapYear(year)))
{
numCells++;
}
return((numCells<=35)?5:6);
}
private int getFirstDayOfMonth(int year,int month)
{
int firstDay;
int i;
if(year<1582)
{
return(-1);
}
if((month<0)||(month>11))
{
return(-1);
}
firstDay=getFirstDayOfYear(year);
for(i=0;i<month;i++)
{
firstDay+=daysInMonth[i];
}
if((month>FEBRUARY)&&calendar.isLeapYear(year))
{
firstDay++;
}
return(firstDay%7);
}
private int getFirstDayOfYear(int year)
{
int leapYears;
int hundreds;
int fourHundreds;
int first;
if(year<1582)
{
return(-1);
}
leapYears=(year-1581)/4;
hundreds=(year-1501)/100;
leapYears-=hundreds;
fourHundreds=(year-1201)/400;
leapYears+=fourHundreds;
first=5+(year-1582)+leapYears%7;
return first;
}
}