java日历窗体
时间: 2023-08-02 10:09:36 浏览: 211
事件处理案例
Java中提供了一个日历类——`java.util.Calendar`,可以通过它来创建一个日历窗体。
下面给出一个简单的示例代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
public class CalendarFrame extends JFrame implements ActionListener {
private JButton btnPrev, btnNext;
private JLabel lblMonth;
private JTable tblCalendar;
private DefaultTableModel tblModel;
public CalendarFrame() {
super("Calendar Application");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// 创建控件
btnPrev = new JButton("<<");
btnNext = new JButton(">>");
lblMonth = new JLabel();
tblModel = new DefaultTableModel() {
public boolean isCellEditable(int rowIndex, int mColIndex) {
return false;
}
};
tblCalendar = new JTable(tblModel);
JScrollPane scrollPane = new JScrollPane(tblCalendar);
// 添加控件
JPanel pnlControl = new JPanel(new FlowLayout());
pnlControl.add(btnPrev);
pnlControl.add(lblMonth);
pnlControl.add(btnNext);
add(pnlControl, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
// 注册事件监听器
btnPrev.addActionListener(this);
btnNext.addActionListener(this);
// 初始化日历
Calendar cal = Calendar.getInstance();
updateCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnPrev) {
Calendar cal = Calendar.getInstance();
cal.set(tblModel.getYear(), tblModel.getMonth() - 1, 1);
updateCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));
} else if (e.getSource() == btnNext) {
Calendar cal = Calendar.getInstance();
cal.set(tblModel.getYear(), tblModel.getMonth() + 1, 1);
updateCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));
}
}
private void updateCalendar(int year, int month) {
lblMonth.setText(year + "年" + (month + 1) + "月");
tblModel.setRowCount(0);
Calendar cal = Calendar.getInstance();
cal.set(year, month, 1);
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int startDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
int row = 0;
for (int i = 1; i <= maxDay; i++) {
int col = (startDay + i - 1) % 7;
if (col == 0) {
tblModel.addRow(new Object[7]);
row++;
}
tblModel.setValueAt(i, row, col);
}
}
public static void main(String[] args) {
new CalendarFrame().setVisible(true);
}
}
```
在这个示例代码中,我们首先创建了一个继承自`JFrame`的类`CalendarFrame`,并添加了一些控件,包括上一页和下一页按钮、用于显示年份和月份的标签、和一个用于显示日历的表格。
接着,我们重写了`DefaultTableModel`的`isCellEditable`方法,使其不可编辑。然后,我们注册了上一页和下一页按钮的事件监听器,并重写了`actionPerformed`方法,以便在用户点击这些按钮时更新日历。
最后,在`updateCalendar`方法中,我们使用`Calendar`类来计算每个月的天数和每个月的第一天是星期几,并将这些信息填充到表格中。
运行程序,我们就可以看到一个简单的日历窗体了。
阅读全文