先实现控制台日历输出,再用Swing构建图形界面。输入年月后,通过Calendar类获取当月第一天的星期和总天数,格式化打印日历表格;Swing版添加文本框、按钮和文本区,支持用户交互显示日历,并可扩展高亮日期、切换月份等功能。

开发一个小型日历应用,可以使用Java基础语法结合Swing或JavaFX构建图形界面。下面以Swing为例,实现一个简单的命令行+图形界面混合的日历程序,支持查看指定年月的日历。
这个小型日历应用主要实现以下功能:
Java中的java.util.Calendar类可以帮助我们获取某年某月的起始星期、天数等信息。
关键逻辑说明:
立即学习“Java免费学习笔记(深入)”;
示例代码(控制台版):
import java.util.Calendar;
import java.util.Scanner;
<p>public class SimpleCalendar {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份(1-12):");
int month = scanner.nextInt();</p><pre class='brush:java;toolbar:false;'> printCalendar(year, month);
scanner.close();
}
public static void printCalendar(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1); // 设置为指定年月的第一天
int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1=周日,7=周六
System.out.println("\n " + year + "年" + month + "月");
System.out.println("日 一 二 三 四 五 六");
// 打印前置空格
for (int i = 1; i < firstDayOfWeek; i++) {
System.out.print(" ");
}
// 打印日期
for (int day = 1; day <= daysInMonth; day++) {
System.out.printf("%2d ", day);
if ((day + firstDayOfWeek - 1) % 7 == 0) { // 换行
System.out.println();
}
}
System.out.println("\n");
}}
为了让应用更直观,可以用Swing做一个简单窗口。
创建一个包含输入框、按钮和文本区域的界面。
Swing版本核心代码片段:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
<p>public class GUICalendar extends JFrame {
private JTextField yearField, monthField;
private JTextArea resultArea;</p><pre class='brush:java;toolbar:false;'>public GUICalendar() {
setTitle("小型日历应用");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// 输入面板
JPanel inputPanel = new JPanel();
inputPanel.add(new JLabel("年份:"));
yearField = new JTextField(8);
inputPanel.add(yearField);
inputPanel.add(new JLabel("月份:"));
monthField = new JTextField(4);
inputPanel.add(monthField);
JButton showBtn = new JButton("显示日历");
inputPanel.add(showBtn);
add(inputPanel, BorderLayout.NORTH);
// 结果显示
resultArea = new JTextArea(10, 20);
resultArea.setFont(new Font("Monospaced", Font.PLAIN, 12));
add(new JScrollPane(resultArea), BorderLayout.CENTER);
// 按钮事件
showBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
int year = Integer.parseInt(yearField.getText());
int month = Integer.parseInt(monthField.getText());
if (month < 1 || month > 12) {
JOptionPane.showMessageDialog(null, "月份必须在1-12之间");
return;
}
resultArea.setText(generateCalendar(year, month));
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "请输入有效数字");
}
}
});
pack();
setLocationRelativeTo(null);
}
private String generateCalendar(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1);
int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
StringBuilder sb = new StringBuilder();
sb.append(" ").append(year).append("年").append(month).append("月\n");
sb.append("日 一 二 三 四 五 六\n");
for (int i = 1; i < firstDayOfWeek; i++) {
sb.append(" ");
}
for (int day = 1; day <= daysInMonth; day++) {
sb.append(String.format("%2d ", day));
if ((day + firstDayOfWeek - 1) % 7 == 0) {
sb.append("\n");
}
}
sb.append("\n");
return sb.toString();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new GUICalendar().setVisible(true);
});
}}
可以在基础功能上继续增强:
基本上就这些。通过Calendar类和基础UI组件,就能快速实现一个实用的小型日历工具。不复杂但容易忽略细节,比如月份偏移和星期对齐。
以上就是Java如何开发一个小型日历应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号