Java实现日历窗口小程序攻略
1. 实现思路
要实现一个日历窗口小程序,可以考虑以下几个步骤:
- 创建一个Swing界面,显示当前日期以及日历窗口。
- 在日历窗口中显示当前月份的日历。
- 提供按钮或其他交互方式,让用户可以切换月份,也可以选择某一天进行其他操作。
2. 示例1:显示当前月份的日历
下面是一个简单的实现示例,可以通过一个二维数组表示一个月份的日历:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CalendarWindow extends JPanel {
private static final long serialVersionUID = 1L;
public CalendarWindow() {
// 获取当前日期
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
// 通过SimpleDateFormat格式化日期,以yyyy-MM格式显示
JLabel label1 = new JLabel(new SimpleDateFormat("yyyy-MM").format(date));
label1.setFont(new Font("宋体", Font.BOLD, 16));
label1.setForeground(Color.BLUE);
// 将日期标签放在界面的上部
add(label1, BorderLayout.NORTH);
String[] headers = { "日", "一", "二", "三", "四", "五", "六" };
// 通过二维数组表示一个月的日历
int[][] data = new int[6][7];
cal.set(Calendar.DAY_OF_MONTH, 1);
int index = cal.get(Calendar.DAY_OF_WEEK) - 1;
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < maxDay; i++) {
data[(i + index) / 7][(i + index) % 7] = (i + 1);
}
// 创建一个用于显示日历的面板
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(6, 7));
// 将显示每天日期的标签添加到面板中
for (int i = 0; i < headers.length; i++) {
JLabel label = new JLabel(headers[i], JLabel.CENTER);
label.setForeground(Color.RED);
p2.add(label);
}
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
JLabel label = new JLabel(String.valueOf(data[i][j]), JLabel.CENTER);
Date currentDate = new Date();
if (data[i][j] == 0) {
label.setForeground(Color.GRAY);
} else if (date.getYear() == currentDate.getYear() && date.getMonth() == currentDate.getMonth()
&& data[i][j] == currentDate.getDate()) {
label.setForeground(Color.RED);
} else {
label.setForeground(Color.BLACK);
}
p2.add(label);
}
}
add(p2, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new CalendarWindow());
frame.pack();
frame.setVisible(true);
}
}
这个示例中,我们通过一个二维数组表示当前月份的日历。首先获取当前日期,然后将日历的第一天设置为这个月的第一天,计算出这个月的天数以及第一天是星期几,然后将每天日期填入数组。创建一个打印日历的面板,并在面板中显示每天日期。
运行这个程序,可以看到一个显示当前月份日历的窗口。
3. 示例2:切换月份
实现切换月份需要在上面的基础上进行修改。我们可以提供两个按钮,分别用于切换到上一个月和下一个月。点击这些按钮后,修改当前日期,重新计算日历,然后将日历面板中的内容更新为新的日历。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CalendarWindow extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel label1;
private JPanel p2;
public CalendarWindow() {
// 获取当前日期
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
// 创建一个用于显示日期和按钮的面板
JPanel p1 = new JPanel(new FlowLayout());
JButton btn1 = new JButton("<<");
JButton btn2 = new JButton(">>");
p1.add(btn1);
p1.add(btn2);
// 通过SimpleDateFormat格式化日期,以yyyy-MM格式显示
label1 = new JLabel(new SimpleDateFormat("yyyy-MM").format(date));
label1.setFont(new Font("宋体", Font.BOLD, 16));
label1.setForeground(Color.BLUE);
p1.add(label1);
// 将面板放在界面的上部
add(p1, BorderLayout.NORTH);
// 创建一个用于显示日历的面板
p2 = new JPanel();
p2.setLayout(new GridLayout(6, 7));
add(p2, BorderLayout.CENTER);
// 初次显示当前月份的日历
showCalendar(cal);
// 配置“上一个月”的按钮
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cal.add(Calendar.MONTH, -1);
showCalendar(cal);
}
});
// 配置“下一个月”的按钮
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cal.add(Calendar.MONTH, 1);
showCalendar(cal);
}
});
}
// 在日历面板中显示指定日期的日历
private void showCalendar(Calendar cal) {
Date date = cal.getTime();
label1.setText(new SimpleDateFormat("yyyy-MM").format(date));
String[] headers = { "日", "一", "二", "三", "四", "五", "六" };
// 通过二维数组表示一个月的日历
int[][] data = new int[6][7];
cal.set(Calendar.DAY_OF_MONTH, 1);
int index = cal.get(Calendar.DAY_OF_WEEK) - 1;
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < maxDay; i++) {
data[(i + index) / 7][(i + index) % 7] = (i + 1);
}
p2.removeAll();
// 将显示每天日期的标签添加到面板中
for (int i = 0; i < headers.length; i++) {
JLabel label = new JLabel(headers[i], JLabel.CENTER);
label.setForeground(Color.RED);
p2.add(label);
}
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
JLabel label = new JLabel(String.valueOf(data[i][j]), JLabel.CENTER);
Date currentDate = new Date();
if (data[i][j] == 0) {
label.setForeground(Color.GRAY);
} else if (date.getYear() == currentDate.getYear() && date.getMonth() == currentDate.getMonth()
&& data[i][j] == currentDate.getDate()) {
label.setForeground(Color.RED);
} else {
label.setForeground(Color.BLACK);
}
p2.add(label);
}
}
p2.updateUI();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new CalendarWindow());
frame.pack();
frame.setVisible(true);
}
}
这个示例中,我们添加了两个按钮,分别用于切换到上一个月和下一个月。在按钮的ActionListener中,我们修改了当前日期,然后重新计算日历,最后更新日历面板的内容。
运行这个程序,可以看到一个可以切换月份的日历窗口。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现日历窗口小程序 - Python技术站