# 日历工具
# 描述
编写基于Java的图形化日历组件显示日期和时间并进行适当的功能扩充。要求如下:
- 支持农历日历的显示,公历日历的显示
- 显示当月日历、当前日期、当前时间
- 可查询任意月以及任意年的日历
- 可以查询某一天是周几(按公元1年1月1日是周一算)
- 可以在某一天添加事件或提醒
- 使用图形化界面弹出特定日期的提醒
- 正常运行和退出程序,退出程序事件要保留,再次查看时可提醒
- 界面简洁美观
- 其他创意功能
# 预览图
图一 日历

图二 日历提醒和事件

# 功能描述
- 最上方时间会每秒刷新,实时显示当前时间。
- 年月右侧的按钮'<'和'>'可以实现月份的增加和减少,并更新日历面板的数据。
- 点击日历面板具体的某一天会在下方显示星期、天干地支、生肖、农历信息以及当天的事件列表。
- 提醒事件会在当天触发提醒弹窗,可在下方输入框为点击后的日期添加提醒事件。
- 程序运行和退出会存档事件,下次运行会自动载入事件。
其他创意功能为天干地支和十二生肖年的展示
# 部分代码展示
package calendar;
import calendar.pane.CalendarPane;
import calendar.pane.EventPane;
import calendar.pane.TimePane;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("日历");
// 总面板
BorderPane root = new BorderPane();
// 设置外边距
root.setPadding(new Insets(10, 20, 10, 20));
// 时间面板
root.setTop(new TimePane());
// 日历面板
root.setCenter(new CalendarPane());
// 事件面板
root.setBottom(new EventPane());
// 设置大小
primaryStage.setScene(new Scene(root, 470, 750));
// 显示主窗口
primaryStage.show();
// 主窗口关闭时的回调 保存事件
primaryStage.setOnCloseRequest(e -> EventPane.saveEvent());
}
public static void main(String[] args) {
launch(args);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
这边只展示部分UI代码
遵循30%注释原则,本项目代码注释较为详细。
# 开发日志
# 开发者说
开发GUI桌面端正常是不会选择Java技术栈的,但是题目要求Java,只能硬上了。 这也是本人第一次接触Java GUI开发,开发体验一般。
本项目基于JDK1.8开发,注意!!!Java FX在JDK1.8之后被移除。 初版采用Java Swing进行开发,开发过程中发现体验极差,故采用Java FX重构。 由于本项目较为简单,故没有采用Java FX的领域语言FXML进行模板化开发, 采用纯代码的方式进行UI的开发。计算农历的代码来自网络,如果造轮子需要很长时间 的时候,不妨试试别人的轮子。
# 可优化点
本项目作为课程设计已然达到全部要求,且开发周期较短,约为1.5天。 但作为日常工具使用的话,需要进行优化,下面列举一些需要优化的点:
- 代码组织方式,推荐使用FXML进行模版化重构,事件和数据结构会更合理, 且不需要数据在各个组件之间交互。 若仍采用纯代码UI,也可以只使用一个类组织UI组件, 从而简化组件之间的数据交互。
- 选中的日期和当天的日期可以做高亮处理。
- 事件提醒时间只做到了某年某月某日,可以精确到分。
- 组件事件相关优化。
- UI背景色等样式相关优化。