用Java写一个程序 并对每行代码进行解释,生成一个Java程序题目:简易日历程序 编写具有图形用户界面( GUI )的日历组件显示日期和时间并进行。 主要功能: 1、显示当月日历,当前日期、当前时间; 2、可查询任意月以及任意年的日历; 3、正常运行和退出程序。
时间: 2024-02-22 19:59:33 浏览: 135
好的,下面是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);
}
}
```
代码解释:
1. 导入必要的包:`java.awt.*`、`java.awt.event.*`、`java.util.Calendar`和`javax.swing.*`。
2. 创建一个名为`SimpleCalendar`的类,继承自`JFrame`类,并实现`ActionListener`接口。
3. 定义私有变量:`currentMonth`和`currentYear`,用于保存当前月份和年份。
4. 构造函数中,设置窗口大小和位置,创建面板、标签、按钮和文本区域,并添加监听器和组件,初始化当前月份和年份,更新日历。
5. `updateCalendar`方法用于更新日历,首先设置当前月份和年份的标签的文本,创建一个`Calendar`对象,并设置月份和年份,然后获取当前月份的第一天是星期几,生成日历字符串,最后将日历字符串设置为文本区域的文本。
6. `getMonthName`方法用于获取月份名称。
7. `actionPerformed`方法用于处理按钮点击事件,根据不同的按钮更新当前月份和年份,然后更新日历。
8. `main`方法创建一个`SimpleCalendar`对象,并设置关闭操作和可见性。
这是一个简易的日历程序,具有图形用户界面(GUI),可以显示当月日历、当前日期和当前时间,还可以查询任意月份和年份的日历。程序主要使用了`JFrame`、`JPanel`、`JLabel`、`JButton`、`JTextArea`和`Calendar`等类和组件,通过监听按钮点击事件来更新日历。
阅读全文
相关推荐











