import java.applet.Applet;
import java.awt.*;
import java.util.*;
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(" 年:")); //增加组件到Applet
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 (searchYearInt > 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) { //年份小于1582年,返回-1
return (-1);
}
if ((month < 0) || (month > 11)) { //月份数错误,返回-1
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) { //如果年份小于1582年
return (-1); //返回-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;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java实用程序设计100例(第2章).rar
共91个文件
jpg:22个
bmp:19个
class:17个
需积分: 9 3 下载量 7 浏览量
2008-01-16
13:02:18
上传
评论
收藏 1.12MB RAR 举报
温馨提示
Java实用程序设计100例(源码)\第2章.rar
资源推荐
资源详情
资源评论
收起资源包目录
第2章.rar (91个子文件)
第2章
实例37 万年历
CalendarApplet.java 6KB
Calendar.html 165B
43-1.bmp 464KB
CalendarApplet.class 4KB
实例25抖动文字
31-1.bmp 163KB
JumpText.html 233B
JumpTextApplet.class 4KB
JumpTextApplet.java 5KB
实例30 伸展文字
36-2.bmp 140KB
ExtendTextApplet.class 3KB
ExtendTextApplet.java 3KB
ExtendText.HTML 201B
36-1.bmp 140KB
实例32 图片火焰效果
FirePicture.HTML 157B
38-1.bmp 214KB
FirePicApplet.class 2KB
back.JPG 13KB
image1.gif 815B
FirePicApplet.java 3KB
实例34 图片倒影
ReflectionApplet.java 3KB
ReflectionApplet.class 3KB
40-1.bmp 185KB
lake.gif 13KB
Reflection.html 199B
image1.jpg 3KB
实例38 计算器
Calculator.html 148B
Calculator.class 3KB
Calculator.java 5KB
44-1.bmp 212KB
实例33 图片百叶窗
image3.jpg 17KB
ShutterApplet.class 4KB
39-1.bmp 215KB
image0.jpg 19KB
image1.jpg 17KB
ShutterApplet.java 5KB
image2.jpg 11KB
image4.jpg 16KB
shutter.html 419B
实例26 阴影文字
32-1.bmp 149KB
ShadowText.html 384B
ShadowTextApplet.class 3KB
ShadowTextApplet.java 5KB
实例31 用Applet显示图片
image3.jpg 17KB
ShowImageApplet.java 2KB
image0.jpg 19KB
image1.jpg 17KB
37-1.bmp 238KB
image2.jpg 11KB
image4.jpg 16KB
ShowImageApplet.class 2KB
ShowImage.html 163B
实例35 图片翻折
image3.jpg 17KB
TurnApplet.class 3KB
image0.jpg 19KB
41-2.bmp 264KB
image1.jpg 17KB
41-1.bmp 264KB
turn.html 481B
image2.jpg 11KB
TurnApplet.java 3KB
image4.jpg 16KB
实例28 波浪文字
34-2.bmp 237KB
WaveText.HTML 195B
34-1.bmp 237KB
WaveTextApplet.class 3KB
WaveTextApplet.java 3KB
实例36 闹钟
AlarmApplet.class 3KB
AlarmApplet$2.class 497B
alarm.wav 415KB
AlarmApplet$1.class 497B
Alarm.html 141B
AlarmApplet.java 3KB
42-1.bmp 277KB
实例39 电子相册
image3.jpg 17KB
AlbumApplet.java 2KB
image0.jpg 19KB
Album.HTML 601B
image1.jpg 17KB
45-1.bmp 344KB
image2.jpg 11KB
image4.jpg 16KB
AlbumApplet.class 2KB
实例29 飞行文字
FlyTextApplet.class 2KB
35-1.bmp 254KB
FlyTextApplet.java 2KB
FlyText.HTML 194B
35-2.bmp 254KB
实例27 3D文字
Text3DApplet.class 2KB
3DText.html 199B
Text3DApplet.java 2KB
33-1.bmp 159KB
共 91 条
- 1
资源评论
zhengshaojiede
- 粉丝: 4
- 资源: 39
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功