Java实现日历,GUI使用Swing
时间: 2023-07-11 12:37:53 浏览: 90
Java实现日历,GUI使用Swing,可以使用JFrame、JPanel、JLabel、JButton等Swing组件来实现。以下是一个简单的示例:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CalendarDemo extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JLabel monthLabel; // 月份
private JButton prevMonthButton; // 上个月
private JButton nextMonthButton; // 下个月
private JPanel dayPanel; // 星期几和日期
private int year; // 年份
private int month; // 月份
public CalendarDemo() {
super("日历");
year = Calendar.getInstance().get(Calendar.YEAR);
month = Calendar.getInstance().get(Calendar.MONTH);
monthLabel = new JLabel(year + "年" + (month + 1) + "月");
prevMonthButton = new JButton("上个月");
nextMonthButton = new JButton("下个月");
dayPanel = new JPanel(new GridLayout(7, 7));
prevMonthButton.addActionListener(this);
nextMonthButton.addActionListener(this);
// 添加星期几标签
dayPanel.add(new JLabel("星期日"));
dayPanel.add(new JLabel("星期一"));
dayPanel.add(new JLabel("星期二"));
dayPanel.add(new JLabel("星期三"));
dayPanel.add(new JLabel("星期四"));
dayPanel.add(new JLabel("星期五"));
dayPanel.add(new JLabel("星期六"));
// 添加日期按钮
updateCalendar();
// 添加组件
add(monthLabel, BorderLayout.NORTH);
add(prevMonthButton, BorderLayout.WEST);
add(nextMonthButton, BorderLayout.EAST);
add(dayPanel, BorderLayout.CENTER);
// 设置窗口大小、位置和可见性
setSize(400, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == prevMonthButton) {
if (month == 0) {
year--;
month = 11;
} else {
month--;
}
} else if (e.getSource() == nextMonthButton) {
if (month == 11) {
year++;
month = 0;
} else {
month++;
}
}
monthLabel.setText(year + "年" + (month + 1) + "月");
updateCalendar();
}
private void updateCalendar() {
dayPanel.removeAll();
// 添加星期几标签
dayPanel.add(new JLabel("星期日"));
dayPanel.add(new JLabel("星期一"));
dayPanel.add(new JLabel("星期二"));
dayPanel.add(new JLabel("星期三"));
dayPanel.add(new JLabel("星期四"));
dayPanel.add(new JLabel("星期五"));
dayPanel.add(new JLabel("星期六"));
// 获取当月第一天是星期几
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, 1);
int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// 添加空白标签
for (int i = 1; i < firstDayOfWeek; i++) {
dayPanel.add(new JLabel(""));
}
// 添加日期按钮
calendar.set(Calendar.DATE, 1);
while (calendar.get(Calendar.MONTH) == month) {
JButton button = new JButton(String.valueOf(calendar.get(Calendar.DATE)));
button.setBorder(BorderFactory.createEmptyBorder());
button.setBackground(Color.WHITE);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
System.out.println(button.getText());
}
});
dayPanel.add(button);
calendar.add(Calendar.DATE, 1);
}
// 补充空白标签
while (dayPanel.getComponentCount() < 49) {
dayPanel.add(new JLabel(""));
}
// 重新绘制日历
dayPanel.revalidate();
dayPanel.repaint();
}
public static void main(String[] args) {
new CalendarDemo();
}
}
```
上述代码中,我们创建了一个继承自JFrame的类CalendarDemo,实现了ActionListener接口来处理按钮的点击事件。我们使用JLabel来显示当前月份,使用JButton来显示日期。在updateCalendar方法中,我们使用GridLayout布局来排列星期几和日期,使用Calendar类来获取当前月份的第一天是星期几,然后添加空白标签来占位,最后添加日期按钮。我们可以通过点击日期按钮来处理具体的业务逻辑。