编写一个程序,显示当前月的日历,如下图所示。使用标签并且在标签上设置文本以显示日历。
代码实现:
CalendarPanel类
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
public class CalendarPanel extends JPanel{
private Calendar calendar;
private int month;
private int year;
private int daysInMonth;
private JLabel jlblHeader;
private JLabel[] jlblDay;
public CalendarPanel() {
calendar=new GregorianCalendar();
month=calendar.get(2);
year=calendar.get(1);
daysInMonth=calendar.getActualMaximum(5);
jlblHeader=new JLabel(String.valueOf(month+1)+"/"+year,0);
jlblDay=new JLabel[49];
calendar.set(1, year);
calendar.set(2, month);
final int firstDay=calendar.get(7);
final JPanel jpDays=new JPanel(new GridLayout(6, 7));
jpDays.add(new JLabel("Sunday", 0));
jpDays.add(new JLabel("Monday", 0));
jpDays.add(new JLabel("Tuesday", 0));
jpDays.add(new JLabel("Wednesday", 0));
jpDays.add(new JLabel("Thursday", 0));
jpDays.add(new JLabel("Friday", 0));
jpDays.add(new JLabel("Saturday", 0));
for(int i=1;i<firstDay;i++)
jpDays.add(new JLabel());
for(int i=1;i<=daysInMonth;++i)
{
jpDays.add(jlblDay[i]=new JLabel(new StringBuilder(String.valueOf(i)).toString()));
jlblDay[i].setBorder(new LineBorder(Color.BLACK,1));
jlblDay[i].setHorizontalAlignment(4);
jlblDay[i].setVerticalAlignment(1);
}
setLayout(new BorderLayout());
add(jlblHeader,BorderLayout.NORTH);
add(jpDays, BorderLayout.CENTER);
jpDays.setBorder(new EmptyBorder(4, 4, 4, 4));
}
}
Frame:
import javax.swing.JFrame;
public class MainFrame extends JFrame{
private CalendarPanel panel=new CalendarPanel();
public MainFrame9() {
add(panel);
}
public static void main(String[] args) {
MainFrame9 frame=new MainFrame9();
frame.setSize(500, 500);
frame.setTitle("当月日历");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);
}
}