最近在写一个在面板中显示日历的程序,但是不知道怎么触发显示下一个月或者前一个月的日历。麻烦各位帮帮忙支支招。附上代码如下:import javax.swing.*;   
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;public class NoteBook extends JFrame {

private int year = 0;
private int month = 0;
private int day = 0;

private int startDays=0;

private JButton jbtAdd = new JButton("添加");
private JButton jbtSee = new JButton("查看");
private JButton jbtDel = new JButton("删除");
private JButton jbtPre = new JButton("Pre");
private JButton jbtNext = new JButton("Next");

private JTextField jtfYear = new JTextField(10);
private JTextField jtfMonth = new JTextField(10);
private JTextField jtfDay = new JTextField(10);


private JLabel jlbYear = new JLabel("年");
private JLabel jlbMonth = new JLabel("月");
private JLabel jlbDay = new JLabel("日");

private JLabel jlbNull = new JLabel();  //设置一个空的标签
private JLabel jlb1 = new JLabel("星期一");
private JLabel jlb2 = new JLabel("星期二");
private JLabel jlb3 = new JLabel("星期三");
private JLabel jlb4 = new JLabel("星期四");
private JLabel jlb5 = new JLabel("星期五");
private JLabel jlb6 = new JLabel("星期六");
private JLabel jlb0 = new JLabel("星期天");

private JLabel[] jlb = new JLabel[42];  //定义一个标签数组用来存放日期

JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();


public NoteBook(){

jtfYear.setHorizontalAlignment(JTextField.RIGHT);  //设置JTextField的显示方式
jtfMonth.setHorizontalAlignment(JTextField.RIGHT);
jtfDay.setHorizontalAlignment(JTextField.RIGHT);

setLayout(new BorderLayout());
p4.setLayout(new BorderLayout());
p1.add(jbtAdd);
p1.add(jbtSee);
p1.add(jbtDel);
add(p1,BorderLayout.NORTH);
p2.add(jtfYear);
p2.add(jlbYear);
p2.add(jtfMonth);
p2.add(jlbMonth);
p2.add(jtfDay);
p2.add(jlbDay);
p4.add(p2,BorderLayout.NORTH);
p3.setLayout(new GridLayout(7,7,2,2));
p3.add(jlb0);
p3.add(jlb1);
p3.add(jlb2);
p3.add(jlb3);
p3.add(jlb4);
p3.add(jlb5);
p3.add(jlb6);

getDate();     //获得年月日
jtfYear.setText(""+year);  //设置年
jtfMonth.setText(""+month);  //设置月
jtfDay.setText(""+day);    //设置日

// year=Integer.parseInt(jtfYear.getText().trim());
// month=Integer.parseInt(jtfMonth.getText().trim());
showCalendar();
 

p4.add(p3,BorderLayout.CENTER);
p5.add(jbtPre);
p5.add(jlbNull);
p5.add(jbtNext);
p4.add(p5,BorderLayout.SOUTH);

add(p4,BorderLayout.CENTER);


setTitle("NoteBook");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
// setSize(500,600);
setVisible(true);
    
jbtPre.addActionListener(new ActionListener(){    //注册按钮  Pre
public void actionPerformed(ActionEvent e){
month--;
repaint();
}
});
jbtNext.addActionListener(new ActionListener(){    //注册按钮 Next
public void actionPerformed(ActionEvent e){
month++;
repaint();
}
});

}

public void showCalendar(){     //显示日历
startDays = getStartDay(getDays(year,month));
for(int i=0,j=1;i<42;i++){
if(i>=startDays&&(j<=getMonthDay(year,month))){
p3.add(jlb[i]=new JLabel(""+j));
//System.out.println("j is "+j);
    j++;     
}
else p3.add(jlb[i]= new JLabel());
//System.out.println("i is "+i);
}
}

public void getDate(){ //获得当前日期

java.util.Date current=new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd"); 
        String c=sdf.format(current);
//  System.out.println(c);

// Calendar calendar = Calendar.getInstance();
// Date date = calendar.getTime();
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String[] tokens = c.split("-");
// for(String a : tokens){
// System.out.println(a);
// }
for(int i=0,temp=0;i<tokens.length;i++){
temp=Integer.parseInt(tokens[i]);
System.out.println(temp);
}
year=Integer.parseInt(tokens[0]);     //获得当月的年月日
month=Integer.parseInt(tokens[1]);
day=Integer.parseInt(tokens[2]);
}

public boolean isLeapYear(int y){   //判断闰年
boolean isLY=false;
if((y%4==0&& y%100!=0)||(y%400==0))
 isLY=true;
return isLY;
}

public int getDays(int year,int month){   //获得总共的天数
int totalDays=0;             
for(int i =1800;i<year;i++){
if(isLeapYear(i))
totalDays+=366;
else totalDays+=365;
}             
totalDays +=getMonthDays(year,month) ;
//System.out.println("总天数为"+totalDays);
return totalDays;
}

public int getMonthDays(int year,int month){  //获得当年月份的总天数
int monthDays=0;
for(int i=1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:monthDays+=31;break;
case 4:
case 6:
case 9:
case 11:monthDays+=30;break;
case 2:if(isLeapYear(year)) monthDays+=29;else monthDays+=28;break;
default:break;
}
}
//System.out.println("月份的总天数"+monthDays);
return monthDays;
}


public int getStartDay(int allDays){   //获得开始的日子
int start=0;
int start1800=3;
start=(allDays+start1800)%7;
return start;
}

public int getMonthDay(int year,int month){   //获得当月的天数
int monthDay=0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:monthDay=31;break;
case 4:
case 6:
case 9:
case 11:monthDay=30;break;
case 2:if(isLeapYear(year)) monthDay=29;else monthDay=28;break;
default:monthDay+=0;
}
return monthDay;
}

public void paintComponent(Graphics g){
// super.paintComponent(g);
showCalendar();
}

public static void main(String args[]){
new NoteBook();
// System.exit(0);

}}
麻烦大家给我指点指点

解决方案 »

  1.   

    改好了,你看一下.import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;public class NoteBook extends JFrame { private int year = 0; private int month = 0; private int day = 0; private int startDays = 0; private JButton jbtAdd = new JButton("添加"); private JButton jbtSee = new JButton("查看"); private JButton jbtDel = new JButton("删除"); private JButton jbtPre = new JButton("Pre"); private JButton jbtNext = new JButton("Next"); private JTextField jtfYear = new JTextField(10); private JTextField jtfMonth = new JTextField(10); private JTextField jtfDay = new JTextField(10); private JLabel jlbYear = new JLabel("年"); private JLabel jlbMonth = new JLabel("月"); private JLabel jlbDay = new JLabel("日"); private JLabel jlbNull = new JLabel(); // 设置一个空的标签 private JLabel jlb1 = new JLabel("星期一"); private JLabel jlb2 = new JLabel("星期二"); private JLabel jlb3 = new JLabel("星期三"); private JLabel jlb4 = new JLabel("星期四"); private JLabel jlb5 = new JLabel("星期五"); private JLabel jlb6 = new JLabel("星期六"); private JLabel jlb0 = new JLabel("星期天"); private JLabel[] jlb = new JLabel[42]; // 定义一个标签数组用来存放日期 JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JPanel p4 = new JPanel(); JPanel p5 = new JPanel(); public NoteBook() { jtfYear.setHorizontalAlignment(JTextField.RIGHT); // 设置JTextField的显示方式
    jtfMonth.setHorizontalAlignment(JTextField.RIGHT);
    jtfDay.setHorizontalAlignment(JTextField.RIGHT); setLayout(new BorderLayout());
    p4.setLayout(new BorderLayout());
    p1.add(jbtAdd);
    p1.add(jbtSee);
    p1.add(jbtDel);
    add(p1, BorderLayout.NORTH);
    p2.add(jtfYear);
    p2.add(jlbYear);
    p2.add(jtfMonth);
    p2.add(jlbMonth);
    p2.add(jtfDay);
    p2.add(jlbDay);
    p4.add(p2, BorderLayout.NORTH);
    p3.setLayout(new GridLayout(7, 7, 2, 2));
    p3.add(jlb0);
    p3.add(jlb1);
    p3.add(jlb2);
    p3.add(jlb3);
    p3.add(jlb4);
    p3.add(jlb5);
    p3.add(jlb6); getDate(); // 获得年月日
    jtfYear.setText("" + year); // 设置年
    jtfMonth.setText("" + month); // 设置月
    jtfDay.setText("" + day); // 设置日 // year=Integer.parseInt(jtfYear.getText().trim());
    // month=Integer.parseInt(jtfMonth.getText().trim());
    showCalendar(); p4.add(p3, BorderLayout.CENTER);
    p5.add(jbtPre);
    p5.add(jlbNull);
    p5.add(jbtNext);
    p4.add(p5, BorderLayout.SOUTH); add(p4, BorderLayout.CENTER); setTitle("NoteBook");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    // setSize(500,600);
    setVisible(true); jbtPre.addActionListener(new ActionListener() { // 注册按钮 Pre
    public void actionPerformed(ActionEvent e) {
    if (month == 1) {
    year--;
    month = 12;
    } else {
    month--;
    }

    showCalendar();
    }
    });
    jbtNext.addActionListener(new ActionListener() { // 注册按钮 Next
    public void actionPerformed(ActionEvent e) {
    if (month == 12) {
    year++;
    month = 1;
    } else {
    month++;
    }
    showCalendar();
    }
    }); } public void showCalendar() { // 显示日历
    startDays = getStartDay(getDays(year, month));
    p3.removeAll();
    for (int i = 0, j = 1; i < 42; i++) {
    if (i >= startDays && (j <= getMonthDay(year, month))) {
    p3.add(jlb[i] = new JLabel("" + j));
    // System.out.println("j is "+j);
    j++;
    } else
    p3.add(jlb[i] = new JLabel());
    // System.out.println("i is "+i);
    }
    p3.validate();
    } public void getDate() { // 获得当前日期 java.util.Date current = new java.util.Date();
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
    "yyyy-MM-dd");
    String c = sdf.format(current);
    // System.out.println(c); // Calendar calendar = Calendar.getInstance();
    // Date date = calendar.getTime();
    // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
    String[] tokens = c.split("-");
    // for(String a : tokens){
    // System.out.println(a);
    // }
    for (int i = 0, temp = 0; i < tokens.length; i++) {
    temp = Integer.parseInt(tokens[i]);
    System.out.println(temp);
    }
    year = Integer.parseInt(tokens[0]); // 获得当月的年月日
    month = Integer.parseInt(tokens[1]);
    day = Integer.parseInt(tokens[2]);
    } public boolean isLeapYear(int y) { // 判断闰年
    boolean isLY = false;
    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
    isLY = true;
    return isLY;
    } public int getDays(int year, int month) { // 获得总共的天数
    int totalDays = 0;
    for (int i = 1800; i < year; i++) {
    if (isLeapYear(i))
    totalDays += 366;
    else
    totalDays += 365;
    }
    totalDays += getMonthDays(year, month);
    // System.out.println("总天数为"+totalDays);
    return totalDays;
    } public int getMonthDays(int year, int month) { // 获得当年月份的总天数
    int monthDays = 0;
    for (int i = 1; i < month; i++) {
    switch (i) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    monthDays += 31;
    break;
    case 4:
    case 6:
    case 9:
    case 11:
    monthDays += 30;
    break;
    case 2:
    if (isLeapYear(year))
    monthDays += 29;
    else
    monthDays += 28;
    break;
    default:
    break;
    }
    }
    // System.out.println("月份的总天数"+monthDays);
    return monthDays;
    } public int getStartDay(int allDays) { // 获得开始的日子
    int start = 0;
    int start1800 = 3;
    start = (allDays + start1800) % 7;
    return start;
    } public int getMonthDay(int year, int month) { // 获得当月的天数
    int monthDay = 0;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    monthDay = 31;
    break;
    case 4:
    case 6:
    case 9:
    case 11:
    monthDay = 30;
    break;
    case 2:
    if (isLeapYear(year))
    monthDay = 29;
    else
    monthDay = 28;
    break;
    default:
    monthDay += 0;
    }
    return monthDay;
    } public void paintComponent(Graphics g) {
    // super.paintComponent(g);
    showCalendar();
    } public static void main(String args[]) {
    new NoteBook();
    // System.exit(0); }}