用Java写一个程序 并对每行代码进行解释,生成一个Java程序题目:简易日历程序 编写具有图形用户界面( GUI )的日历组件显示日期和时间并进行。 主要功能: 1、显示当月日历,当前日期、当前时间; 2、可查询任意月以及任意年的日历; 3、正常运行和退出程序。
时间: 2024-02-22 20:59:33 浏览: 131
好的,下面是Java程序题目:
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.*;
public class SimpleCalendar extends JFrame implements ActionListener {
private JLabel currentMonthLabel, currentYearLabel;
private JButton previousMonthButton, nextMonthButton, previousYearButton, nextYearButton;
private JTextArea calendarArea;
private int currentMonth, currentYear;
public SimpleCalendar() {
super("Simple Calendar");
// 设置窗口大小和位置
setSize(400, 300);
setLocationRelativeTo(null);
// 创建面板
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel bottomPanel = new JPanel(new BorderLayout());
// 创建标签和按钮
currentMonthLabel = new JLabel();
currentYearLabel = new JLabel();
previousMonthButton = new JButton("<<");
nextMonthButton = new JButton(">>");
previousYearButton = new JButton("<");
nextYearButton = new JButton(">");
// 添加监听器
previousMonthButton.addActionListener(this);
nextMonthButton.addActionListener(this);
previousYearButton.addActionListener(this);
nextYearButton.addActionListener(this);
// 添加组件
topPanel.add(previousYearButton);
topPanel.add(previousMonthButton);
topPanel.add(currentMonthLabel);
topPanel.add(currentYearLabel);
topPanel.add(nextMonthButton);
topPanel.add(nextYearButton);
calendarArea = new JTextArea();
calendarArea.setEditable(false);
calendarArea.setFont(new Font("Arial", Font.PLAIN, 14));
JScrollPane scrollPane = new JScrollPane(calendarArea);
bottomPanel.add(scrollPane, BorderLayout.CENTER);
getContentPane().add(topPanel, BorderLayout.NORTH);
getContentPane().add(bottomPanel, BorderLayout.CENTER);
// 初始化当前月份和年份
Calendar calendar = Calendar.getInstance();
currentMonth = calendar.get(Calendar.MONTH);
currentYear = calendar.get(Calendar.YEAR);
// 更新日历
updateCalendar();
}
// 更新日历
private void updateCalendar() {
currentMonthLabel.setText(getMonthName(currentMonth));
currentYearLabel.setText(Integer.toString(currentYear));
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, currentMonth);
calendar.set(Calendar.YEAR, currentYear);
calendar.set(Calendar.DAY_OF_MONTH, 1);
int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
StringBuilder calendarStringBuilder = new StringBuilder();
calendarStringBuilder.append("Sun Mon Tue Wed Thu Fri Sat\n");
for (int i = 1; i < firstDayOfWeek; i++) {
calendarStringBuilder.append(" ");
}
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 1; i <= daysInMonth; i++) {
if (i < 10) {
calendarStringBuilder.append(" ");
}
calendarStringBuilder.append(i);
if ((i + firstDayOfWeek - 1) % 7 == 0) {
calendarStringBuilder.append("\n");
} else {
calendarStringBuilder.append(" ");
}
}
calendarArea.setText(calendarStringBuilder.toString());
}
// 获取月份名称
private String getMonthName(int month) {
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
// 处理按钮点击事件
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == previousMonthButton) {
currentMonth--;
if (currentMonth < 0) {
currentMonth = 11;
currentYear--;
}
} else if (event.getSource() == nextMonthButton) {
currentMonth++;
if (currentMonth > 11) {
currentMonth = 0;
currentYear++;
}
} else if (event.getSource() == previousYearButton) {
currentYear--;
} else if (event.getSource() == nextYearButton) {
currentYear++;
}
updateCalendar();
}
public static void main(String[] args) {
SimpleCalendar calendar = new SimpleCalendar();
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calendar.setVisible(true);
}
}
代码解释:
- 导入必要的包:
java.awt.*
、java.awt.event.*
、java.util.Calendar
和javax.swing.*
。 - 创建一个名为
SimpleCalendar
的类,继承自JFrame
类,并实现ActionListener
接口。 - 定义私有变量:
currentMonth
和currentYear
,用于保存当前月份和年份。 - 构造函数中,设置窗口大小和位置,创建面板、标签、按钮和文本区域,并添加监听器和组件,初始化当前月份和年份,更新日历。
updateCalendar
方法用于更新日历,首先设置当前月份和年份的标签的文本,创建一个Calendar
对象,并设置月份和年份,然后获取当前月份的第一天是星期几,生成日历字符串,最后将日历字符串设置为文本区域的文本。getMonthName
方法用于获取月份名称。actionPerformed
方法用于处理按钮点击事件,根据不同的按钮更新当前月份和年份,然后更新日历。main
方法创建一个SimpleCalendar
对象,并设置关闭操作和可见性。
这是一个简易的日历程序,具有图形用户界面(GUI),可以显示当月日历、当前日期和当前时间,还可以查询任意月份和年份的日历。程序主要使用了JFrame
、JPanel
、JLabel
、JButton
、JTextArea
和Calendar
等类和组件,通过监听按钮点击事件来更新日历。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://img-home.csdnimg.cn/images/20250102104920.png)