自己制作一个日历,默认输出系统年月
代码执行结果:
代码如下:
package Calendar;
//日历类
import java.util.Calendar;
import java.util.Date;
public class CalendarBean {
int year;
int month;
CalendarBean(){
Date now = new Date();
String year = String.format("%tY", now);
String month = String.format("%tm", now);
this.year = Integer.parseInt(year);
this.month = Integer.parseInt(month);
}
public String [] getCalendar() {
String [] a = new String[49];
String [] week = {"日","一","二","三","四","五","六"};
for(int i=0;i<7;i++) {
a[i] = week[i];
}
Calendar cal = Calendar.getInstance();
cal.set(year, month-1,1);
int weekday = cal.get(Calendar.DAY_OF_WEEK)-1;
int day = 0;
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break;
case 4: case 6: case 9: case 11: day = 30; break;
case 2:
if((year%4==0)&&(year%100!=0)||(year%400)==0) {
day = 29;
break;
}
else {
day = 28;
break;
}
}
int d=1;
for(int i=7;i<7+weekday;i++) {
a[i] = " ";
}
for(int i=7+weekday; i<7+weekday+day;i++) {
a[i] = Integer.toString(d);
d++;
}
for(int i=7+weekday+day;i<49;i++) {
a[i] = " ";
}
return a;
}
public void Previous() {//查看本月之前的月份
if(month==1) {//Month为1时的处理
this.year = year-1;
this.month = 12;
}
else {
this.month = month-1;
}
}
public void Next() {//查看本月之后的月份
if(month==12) {//month为12时的处理
this.year = year+1;
this.month = 1;
}
else {
this.month = month+1;
}
}
public String Date() {//输出年月
return year+"年"+month+"月";
}
public void setDate(int y,int m) {
this.year = y;
this.month = m;
}
}
package Calendar;
//窗口类
import javax.swing.*;
import java.awt.*;
public class Window extends JFrame{
JButton button1; //上月
JButton button2; //下月
JButton button3; //设置
JTextField text1; //年
JTextField text2; //月
Box boxH1,boxH2; //行;某年某月
Box boxV; //列;上某年某月,下为按钮
JPanel pCenter;
JPanel pNorth;
JPanel pSouth;
MousePolice police;//mouseevent
CalendarBean cal; //日历类
JLabel [][] label; //日历
JLabel slabel; //在界面南端显示当前年月
Window(){
this.setLayout(new BorderLayout());//设置为边界布局
this.setBounds(100, 100, 600, 600);//设置窗口位置以及大小
this.init();
this.printCalendar();
police = new MousePolice(button1,button2,button3,text1,text2,this);
button1.addMouseListener(police);
button2.addMouseListener(police);
button3.addMouseListener(police);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
void init() {
/*
* 边界布局North的设置,上一列用于设置日期,下一列为三个按钮,用于设置日期,查看当前日期之前或之后的日历。
* 设置两个行式盒,一个放置文本框+标签,另一个放置三个按钮;
* 设置一个列式盒放置两个行式盒;
* 将列式盒放入pNorth;
* 将pNorth放入窗口,即边界布局的北面:BorderLayout.NORTH;
*/
button1 = new JButton("上月");
button2 = new JButton("下月");
button3 = new JButton("设置");
boxH1 = Box.createHorizontalBox();//行式盒1
boxH2 = Box.createHorizontalBox();//行式盒2
boxV = Box.createVerticalBox();//列式盒
text1 = new JTextField(5);//文本框
text2 = new JTextField(5);//文本框
//向行式盒1中添加文本框1以及标签“年”
boxH1.add(text1);
boxH1.add(new JLabel("年"));
//向行式盒1中添加文本框2以及标签“月”
boxH1.add(text2);
boxH1.add(new JLabel("月"));
//向行式盒2中添加三个按钮
boxH2.add(button1);
boxH2.add(button2);
boxH2.add(button3);
//向列式盒中添加行式盒1和行式盒2
boxV.add(boxH1);
boxV.add(boxH2);
//实例化pNorth并设置为流式布局
pNorth = new JPanel();
pNorth.setLayout(new FlowLayout());
pNorth.add(boxV); //向pNorth中添加列式盒
this.add(pNorth, BorderLayout.NORTH);//向窗口北面边界添加容器pNorth;
/*
* 将边界布局中心设为网格布局
* 设置JPanel容器pCenter;
* 将pCenter设置为7x7网格布局
* 设置7x7标签数组label(JLabel)并初始化
* 向pCenter中添加标签
* 将pCenter放入窗口中心:BorderLayout.CENTER;
*/
pCenter = new JPanel();
pCenter.setLayout(new GridLayout(7,7));//实例化pCenter
label = new JLabel[7][7];//实例化label,用于存储日历
for(int i=0;i<7;i++) {
for(int j=0;j<7;j++) {
label[i][j] = new JLabel("", JLabel.CENTER);
pCenter.add(label[i][j]);
}
}
this.add(pCenter,BorderLayout.CENTER);//放置在窗口中心
pSouth = new JPanel();//实例化pSouth并设置为流式布局
pSouth.setLayout(new FlowLayout());
cal = new CalendarBean(); //实例化日历对象
slabel = new JLabel("日历:"+cal.Date());
pSouth.add(slabel,BorderLayout.SOUTH);//像容器pSouth中添加标签“某年某月”
this.add(pSouth,BorderLayout.SOUTH);//向窗口南边界添加容器pSouth
}
public void printCalendar() {//设置标签数组中每一个元素的名称,即日历
String [] a = cal.getCalendar();
int d = 0;
for(int i=0;i<7;i++) {
for(int j=0;j<7;j++) {
label[i][j].setText(a[d]);
d++;
}
}
}
public void Previous() {//输出当前月份之前的月份
cal.Previous();
this.printCalendar();
slabel.setText("日历:"+cal.Date());
}
public void Next() {//输出当前月份之后的月份
cal.Next();
this.printCalendar();
slabel.setText("日历:"+cal.Date());
}
public void Set(int y, int m) {//自定义年月
cal.setDate(y, m);
this.printCalendar();
slabel.setText("日历:"+cal.Date());
}
}
package Calendar;
//使用MouseEvent监听点击按钮并做出处理
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MousePolice implements MouseListener{
JButton button1;
JButton button2;
JButton button3;
JTextField text1;
JTextField text2;
Window win;
MousePolice(JButton button1, JButton button2,JButton button3,
JTextField text1,JTextField text2,Window win){
this.button1 = button1;
this.button2 = button2;
this.button3 = button3;
this.text1 = text1;
this.text2 = text2;
this.win = win;
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
if((JButton)arg0.getSource()==button1) {
win.Previous();
}
if((JButton)arg0.getSource()==button2) {
win.Next();
}
if((JButton)arg0.getSource()==button3) {
String y = text1.getText();//提取文本框1中的数据
String m = text2.getText();//提取文本框2中的数据
int year = Integer.parseInt(y);
int month = Integer.parseInt(m);
win.Set(year,month);
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
package Calendar;
//实现
public class Realize {
public static void main(String args[]) {
Window win = new Window();
}
}