用JAVA写一个gui日历
时间: 2023-09-20 14:02:59 浏览: 56
好的,以下是一个使用Java编写的GUI日历:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarGUI extends JFrame {
private JLabel label;
private JButton prevButton;
private JButton nextButton;
private JPanel monthPanel;
private JPanel dayPanel;
private Calendar calendar;
public CalendarGUI() {
// 设置窗口标题
setTitle("Calendar");
// 创建日历对象
calendar = Calendar.getInstance();
// 初始化界面
initUI();
// 显示窗口
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void initUI() {
// 设置布局管理器
setLayout(new BorderLayout());
// 创建月份选择面板
monthPanel = new JPanel();
monthPanel.setLayout(new FlowLayout());
// 添加上个月按钮
prevButton = new JButton("<");
prevButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calendar.add(Calendar.MONTH, -1);
updateUI();
}
});
monthPanel.add(prevButton);
// 添加月份标签
label = new JLabel();
label.setHorizontalAlignment(JLabel.CENTER);
monthPanel.add(label);
// 添加下个月按钮
nextButton = new JButton(">");
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calendar.add(Calendar.MONTH, 1);
updateUI();
}
});
monthPanel.add(nextButton);
// 添加月份选择面板
add(monthPanel, BorderLayout.NORTH);
// 创建日期面板
dayPanel = new JPanel();
dayPanel.setLayout(new GridLayout(0, 7));
// 添加星期标签
String[] weekdays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
for (String weekday : weekdays) {
JLabel label = new JLabel(weekday, JLabel.CENTER);
dayPanel.add(label);
}
// 添加日期标签
updateUI();
add(dayPanel, BorderLayout.CENTER);
}
private void updateUI() {
// 清空日期面板
dayPanel.removeAll();
// 更新月份标签
SimpleDateFormat format = new SimpleDateFormat("MMMM yyyy");
label.setText(format.format(calendar.getTime()));
// 添加日期标签
calendar.set(Calendar.DAY_OF_MONTH, 1);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < dayOfWeek; i++) {
dayPanel.add(new JLabel(""));
}
for (int i = 1; i <= daysInMonth; i++) {
JLabel label = new JLabel(Integer.toString(i), JLabel.CENTER);
dayPanel.add(label);
}
// 重新绘制界面
revalidate();
repaint();
}
public static void main(String[] args) {
// 创建日历GUI对象
new CalendarGUI();
}
}
```
这个日历GUI界面由两个面板组成,一个是月份选择面板,另一个是日期显示面板。月份选择面板包括上个月按钮、月份标签和下个月按钮。日期显示面板则根据当前月份显示日期标签。
当用户点击上个月或下个月按钮时,程序会根据当前日期计算出上个月或下个月的日期,并重新绘制日期面板。