学号: 201303014008  姓名:张燕   班级:计科(高职)13-1

一、题目简介

利用Java GUI的组件类、容器类和辅助类设计所选项目的用户界面,并在深入理解并掌握事件驱动程序设计原理的基础上,实现事件驱动的程序设计。

1.实现图形界面。

2.能以月历形式显示日期与星期。工作日、双休日、当天分别以黑色、红色和蓝色显示。

3.支持用户通过下拉形式菜单来选择月份。

4.通过点击“现在日期”来刷新日历。

二.结对分工

结对者: 张燕   黄彦潇

张燕:代码编写以及程序测试

黄彦潇:程序分析及代码规范

三.代码地址:

https://github.com/yranqiu/test/blob/master/shiyan3

四.测试代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.util.*;

public class CalenderTrain extends JFrame implements ActionListener {

JComboBox Month = new JComboBox(); //月份下拉列表框

JComboBox Year = new JComboBox(); //年份下拉列表框

JLabel Year_l = new JLabel("年份:"); //定义标签

JLabel Month_l = new JLabel("月份:"); //定义标签

Date now_date = new Date(); //获取今天的日期

JButton[] button_day = new JButton[49]; //定义一个数组用来存放日期

JButton button_jump = new JButton("日期跳转"); //现实选择日期

JButton button_today = new JButton("现在日期"); //显示今天日期按钮

int now_year = now_date.getYear() + 1900; //获取年份值

int now_month = now_date.getMonth(); //获取月份值(当前月份-1)

boolean bool = false;

String year_int = null; //存放年份

int month_int; //存放月份

JPanel pane_ym = new JPanel(); //放置下拉列表框和控制按钮面板

JPanel pane_day = new JPanel(); //放置日期面板

JPanel pane_parent = new JPanel(); //放置以上两个面板

//定义方法绘制面板

public CalenderTrain() {

super("JAVA日历程序"); //设定面板标题

//---以下几行使得关闭面板时退出程序

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

addWindowListener(new WindowAdapter() {

public void windowClose(WindowEvent e) {

//System.out.print("CLOSING THE WIN");

System.exit(0);

}

});

setResizable(false); //面板的大小不能变化

//设定年月

/*年份的区间是当前年份的过去10年到当前年份的未来20年

* 月份正常1-12月

*/

for (int i = now_year - 10; i <= now_year + 20; i++) {

Year.addItem(i + "");

}

for (int i = 1; i < 13; i++) {

Month.addItem(i + "");

}

Year.setSelectedIndex(10); //设定年份下拉列表为当前年份

//Year.setText()

pane_ym.add(Year_l); //添加年份标签

pane_ym.add(Year); //添加年份下拉列表框

Month.setSelectedIndex(now_month); //设定月份下拉列表为当前月份

pane_ym.add(Month_l); //添加月份标签

pane_ym.add(Month); //添加月份下拉列表框

pane_ym.add(button_jump); //添加跳转按钮

pane_ym.add(button_today); //添加“现在日期”按钮

button_jump.addActionListener(this); //跳转按钮添加 监听事件

button_today.addActionListener(this); //“现在日期”按钮添加 监听事件

//年月设定结束

//初始化日期按钮并绘制

pane_day.setLayout(new GridLayout(7, 7));

for (int i = 0; i < 49; i++) {

button_day[i] = new JButton(" ");

pane_day.add(button_day[i]);

}

this.setDay(); //调用setDay()方法

pane_parent.setLayout(new BorderLayout()); //设定布局管理器

setContentPane(pane_day);

setContentPane(pane_ym);

pane_parent.add(pane_day, BorderLayout.SOUTH);

pane_parent.add(pane_ym, BorderLayout.NORTH);

setContentPane(pane_parent);

pack();

show();

}

//SET DAY 方法,显示日期

void setDay() {

if (bool) {

year_int = now_year + "";

month_int = now_month;

} else {

year_int = Year.getSelectedItem().toString();

month_int = Month.getSelectedIndex();

//year_int=Year.getText();

//month_int=Integer.parseInt(Month.getText());

}

int year_sel = Integer.parseInt(year_int) - 1900; //获得年份值

Date dt = new Date(year_sel, month_int, 1); //构造一个日期

GregorianCalendar cal = new GregorianCalendar(); //创建一个Calendar实例

cal.setTime(dt);

String week[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

int day = 0; //day中存放某个月份的天数

int day_week = 0; //用来存放某个月的第一天是星期几的数值

//--将星期添加到前7个按钮中

for (int i = 0; i < 7; i++) {

button_day[i].setText(week[i]);

}

//--

/*判断是几月份,根据它来设定day的值

* 其中二月份要判断是否是闰年

*/

if (month_int == 0

|| month_int == 2

|| month_int == 4

|| month_int == 6

|| month_int == 7

|| month_int == 9

|| month_int == 11) {

day = 31;

} else if (

month_int == 3

|| month_int == 5

|| month_int == 8

|| month_int == 10) {

day = 30;

} else {

if (cal.isLeapYear(year_sel)) {

day = 29;

} else {

day = 28;

}

}

day_week = 7 + dt.getDay();

int count = 1;

/*绘制按钮

*首先要根据选定的月份的第一天是星期几来确定我们绘制按钮的起始位置

* 其中day_week就是我们要绘制的起始位置

* 对于那些没有数值可以显示的按钮要置空

*/

for (int i = day_week; i < day_week + day; count++, i++) {

if (i % 7 == 0

|| i == 13

|| i == 20

|| i == 27

|| i == 48

|| i == 34

|| i == 41) {

if (i == day_week + now_date.getDate() - 1) {

button_day[i].setForeground(Color.blue);

button_day[i].setText(count + "");

} else {

button_day[i].setForeground(Color.red);

button_day[i].setText(count + "");

}

} else {

if (i == day_week + now_date.getDate() - 1) {

button_day[i].setForeground(Color.blue);

button_day[i].setText(count + "");

} else {

button_day[i].setForeground(Color.black);

button_day[i].setText(count + "");

}

}

}

//--对于没有日期数值显示的按钮进行置空处理

if (day_week == 0) {

for (int i = day; i < 49; i++) {

button_day[i].setText(" ");

}

} else {

//第一天前面的按钮置空

for (int i = 7; i < day_week; i++) {

button_day[i].setText(" ");

} //最后一天后面的按钮置空

for (int i = day_week + day; i < 49; i++) {

button_day[i].setText(" ");

}

}

}

//点击按钮产生的效果

public void actionPerformed(ActionEvent e) {

if (e.getSource() == button_jump) {

bool = false;

this.setDay(); //如果点击跳转按钮就调用setDay()方法重新绘制按钮

} else if (e.getSource() == button_today) {

bool = true;

this.setDay(); //如果点击现在日期按钮,得到今天的日期

Month.setSelectedIndex(now_month);//将月份置为当前月份

Year.setSelectedIndex(10); //将年份置为当前年份

}

}

public static void main(String[] args) {

CalenderTrain ct = new CalenderTrain();

}

}

}

五、测试结果

六.问题及心得:

在本次实践中,代码编写经常出现错误,运行了好几次才成功,通过结对,我学会了和队员进行合作,容易提高效率和找到自己的错误并改正。

转载于:https://www.cnblogs.com/yanyuranqiu/p/4501749.html

实践作业三 结对项目相关推荐

  1. 张萍萍 计科高职13-1 201303014010 实践三结对项目

    实践三结对项目   学号: 201303014010   姓名:张萍萍    班级:计科(高职)13-1 一.题目简介: 设计一个名为MyPoint的类,表示一个带x坐标和y坐标的点.该类包括: 两个 ...

  2. 现代软件工程 作业 2 结对项目

    这是现代软件工程课的作业 结对项目 Pair Project: 一对同学用结对编程的方法完成 结对编程课件: 现代软件工程讲义 3 结对编程和两人合作 软件工程讲义 3 两人合作(2) 要会做汉堡包 ...

  3. 第六次作业:结对项目之需求分析与原型设计

    结对成员:3018.3019 结对设计过程 调查问卷结果 问题一:遇到困难时,您常到哪个网站寻找解决问题的方法?(选择题) 问题二:除了第一题提到的网站外,您还听过或者使用过其他网站解决问题嘛?请举例 ...

  4. 《结对-结对编程项目作业名称-结对项目总结》

    一. 项目背景: "贪吃蛇"是一款经典的游戏,他因操作简单,娱乐性强而广受欢迎.本文基于Java技术,开发一个操作简单,功能较全的"贪吃蛇"游戏. 二.功能说明 ...

  5. 数据结构上机实践第三周项目4(2)—顺序表应用

    [项目 - 顺序表应用] 定义一个采用顺序结构存储的线性表,设计算法将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1). 项目中用到的算法库为list.cpp和list ...

  6. 数据结构上机实践第三周项目3- 求集合并集

    [项目 - 求集合并集] 假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员.设计算法,用函数unionList(List LA, List LB ...

  7. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库

    [项目2 - 建设"顺序表"算法库]  领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库.  算法库包括两 ...

  8. 数据结构上机实践第三周项目1

    本次实践目的:实现顺序表基本运算有算法依据"最小化"的原则进行测试.目的是要测试"建立线性表"的算法CreateList,为查看建表的结果,需要实现" ...

  9. 实验三 软件工程结对项目

    Deadline:2018-4-4 10:00,以博客发表日期为准 评分标准: 按时交 - 有分(满分30分,代码和博客各15分),检查项目包括: -  未提交项目源码到Github上,代码部分不得分 ...

最新文章

  1. linux软中断分析,linux操作系统下的软中断问题分析_linux教程
  2. 使用literal或者绑定变量执行SAP HANA SQL语句
  3. @ViewChild 的三种常用方法
  4. Jest 只MOCK模块中的某个功能实现
  5. prototype 1.3.1 跟 ajax冲突!!!莫名其妙!
  6. 用python怎么读_python怎么读sql数据?
  7. Unity中Light Probe详解
  8. 很多人在网络上创业看不到本质
  9. NVIDIA官方指南:libav编译支持Nvidia Codec(结果失败)
  10. 4、Android 主流数据库框架
  11. matlab页面背景颜色改变为黑底白字
  12. Google Earth Engine 入门1 GEE账号注册
  13. Aspose.Words.FileCorruptedException: The document appears to be corrupted and cannot be loaded
  14. https://juejin.im/post/5ae081aaf265da0b767d263a
  15. Windows中redis设置密码
  16. QAP内建包迁移教程
  17. matlab simulink的scope 示波器光标如何移动记录
  18. 学校图书管理系统 终结篇
  19. Mysql级联操作,添加外键和删除外键
  20. 【算法学习笔记】寒假打卡1——数组

热门文章

  1. 使用Docker快速搭建生产环境
  2. Z-Stack Home Developer's Guide—2. Overview中文翻译【Z-Stack Home 1.2.0开发文档】
  3. nodejs redis数据类型命令汇总
  4. python2.7虚拟环境
  5. Ajax提交打开新窗口,浏览器拦截处理;以及跨域问题
  6. (转)如何压缩SQL Server 2005指定数据库文件和日志的大小?
  7. Python、数据分析、机器学习、区块链大牛在偷偷看的9本书
  8. 从起源到未来:能自己编程和改进的超人工智能会出现吗?
  9. DeepNude已迅速下线,来看看它涉及的图像修复技术
  10. Simulink之不可控整流电路