我就是设置当天的颜色是兰色的可是,随着年和月的变化,兰色的日期也就变的多了起来,不知道怎么搞的,如今天是5号,以后你改年和月可是每个月的5号都是兰色!
大家帮我看看我的这个方法那里错了?/
public void setToday(){//设置当天的颜色为兰色
      for(int count=getDayweek();count<getDayweek()+getMaxDay();count++)
      if(btn[count].getActionCommand().trim().equals(String.valueOf(getToday())))
       btn[count].setForeground(Color.BLUE);
} 原代码我也贴上大家帮忙看看谢谢了啊!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.event.*;class MyCalendar extends JFrame{

private final String []week={"  日","  一","  二","  三","  四","  五","  六"};          
private  GregorianCalendar now;
private  static final GregorianCalendar nows=new GregorianCalendar();
private int days,year,month,dayweek;//得到当月的天数,年,月,星期几
private int today; //得到今天的日期
private JSpinner yearJ;  //年份微调器
private JComboBox monthC;  //月份的组合框
private JLabel yearLbl;  //年标签
private JLabel monthLbl;  //月标签
private JLabel dateLbl;
private JLabel []lbl=new JLabel[7];
private JButton[] btn=new JButton[42];
private JPanel panel_ym; //放置年和月份的面板
private JPanel panel_day;// 放置天数的面板

    public  int getToday(){
     today=nows.get(Calendar.DAY_OF_MONTH);
     return today;
    }

public MyCalendar(){
setTitle("Calendar Applecation");
setSize(400,220);//设置大小
setResizable(false);//大小为不可调整
Container c=getContentPane();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addWindowListener(new WindowAdapter(){//关闭窗口释放系统的资源      
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}});

panel_ym=new JPanel();
panel_day=new JPanel();
monthC=new JComboBox();
yearLbl=new JLabel("年");
yearLbl.setFont(new Font("宋体",Font.BOLD,18));
yearLbl.setForeground(Color.BLUE);
monthLbl=new JLabel("月");
monthLbl.setFont(new Font("宋体",Font.BOLD,18));
monthLbl.setForeground(Color.BLUE);
dateLbl =new JLabel("日期:");
dateLbl.setFont(new Font("宋体",Font.BOLD,18));
dateLbl.setForeground(Color.BLUE);
JLabel lbls=new JLabel("        ");


yearJ =new JSpinner();//滑块

now =new GregorianCalendar();//得到系统的当前日期
  //Calendar nows=(Calendar)(now.clone());
      //today = nows.get(Calendar.DAY_OF_MONTH);//得到今天的日期
        
         for(int i=1;i<13;i++)   //月份组合框框添加1-12月
             monthC.addItem(""+i);
        month=now.get(Calendar.MONTH);//得到当前系统的月份
        
        monthC.setSelectedIndex(month); //默认为当前系统的月份
        monthC.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            setDate();
         //setToday();
         }});
        
        //设置数字的格式为"0000"
        yearJ.setEditor(new JSpinner.NumberEditor(yearJ, "0000"));
        yearJ.setValue(new Integer(now.get(Calendar.YEAR)));//设定年份列表为当前年份  
        yearJ.addChangeListener(new ChangeListener() { //添加当滑块的数值发生变化
          public void stateChanged(ChangeEvent changeEvent) { 
            setDate();
           // setToday();
                } 
            });
                             
        panel_ym.add(dateLbl);//添加控件
        panel_ym.add(yearJ);
        panel_ym.add(yearLbl);
        panel_ym.add(lbls);
        panel_ym.add(monthC);
        panel_ym.add(monthLbl);
        
        c.add(panel_ym,BorderLayout.NORTH);
        c.add(panel_day,BorderLayout.CENTER);
        panel_day.setLayout(new GridLayout(7,7,1,1));//网格布局
        
        for(int i=0;i<7;i++){  //添加并设置头标签
         lbl[i]=new JLabel();
         lbl[i].setFont(new Font("楷体",Font.BOLD,18));
         lbl[i].setForeground(Color.blue);
         lbl[i].setText(week[i]);
         panel_day.add(lbl[i]);  
        }
         for(int i=0;i<42;i++){ //添加日期按扭
         btn[i]=new JButton();
         panel_day.add(btn[i]);
         btn[i].setFont(new Font("宋体",Font.BOLD,16));
        }
        
        setDate();
        
        
          
}          
   public int getMaxDay(){ //得到当前月的最大天数
    now=new GregorianCalendar(getYear(),getMonth(),1);
    days=now.getActualMaximum(Calendar.DAY_OF_MONTH);
 
    return days;
   }
   
   public int getMonth(){//得到当前的月份
        
        return  monthC.getSelectedIndex();
        
        }
   public int getYear(){ //得到当前的年份
   year=((Integer)yearJ.getValue()).intValue();//得到控制器的数值        
   return year;
}

    public int getDayweek(){  //从星期天开始
    now=new GregorianCalendar(getYear(),getMonth(),today);//设置当月的头一天 
    now.set(Calendar.DAY_OF_MONTH,1);
    dayweek=now.get(Calendar.DAY_OF_WEEK);//得到当月的头一天是星期几
    return dayweek;
    }

   public void setDate(){
        
        now=new GregorianCalendar(getYear(),getMonth(),1);
                
        for(int i=0;i<42;i++){//全部按扭置为空
        btn[i].setText("");
        if(i%7==0||i==6||i==13||i==20||i==27||i==34||i==41)//设置星期天字颜色为红色
        btn[i].setForeground(Color.red);}
        
        int count=getDayweek()-1;
        for(int i=1;i<=getMaxDay();i++){//添加日期到上面
        
        btn[count++].setText(String.valueOf(i));
        }
        setToday();
        }
    public void setToday(){//设置当天的颜色为兰色
    
      
      for(int count=getDayweek();count<getDayweek()+getMaxDay();count++)
      if(btn[count].getActionCommand().trim().equals(String.valueOf(getToday())))
       btn[count].setForeground(Color.BLUE);
       }    }public class MyCalendarTest{

public static void main(String []args){
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();//得到屏幕的对象
int width=screen.width;//屏幕宽度
int height=screen.height;//屏幕高度

MyCalendar frame=new MyCalendar();
frame.setLocation(width/4,height/4);//显示在屏幕的位置
frame.show();//显示窗口
}
}

解决方案 »

  1.   

    package calendar;
    import java.awt.*;
    import java.applet.Applet;
    import java.util.*;public class CalendarApplet extends java.applet.Applet
    {
    private static final long serialVersionUID = 1L;
    public void paint(Graphics g)
    {
    int todayDay;
    int todayMonth;

    Calendar c=Calendar.getInstance();

    todayDay=c.get(c.DAY_OF_MONTH);
    todayMonth=c.get(c.MONTH);

    g.setColor(Color.red);
    g.setFont(new Font("宋体",Font.BOLD,20));
    g.drawString("today is:"+c.get(c.YEAR)+"-"+c.get(c.MONTH)+"-"+todayDay,30,30);

    c.add(c.DAY_OF_MONTH,0-c.get(c.DAY_OF_MONTH)+1);

    g.setColor(new Color(555));
    g.drawRect(20,40,450,200);

    g.setColor(Color.pink);
    g.fillRect(21,41,449,199);

    g.setColor(Color.gray);
    g.fillRect(21,41,449,30);

    g.setFont(new Font("仿宋",Font.BOLD,20));
    g.setColor(Color.GREEN);
    g.drawString("Sun    Mon    Tue     Wed     Thu     Fri     Sat",40,65);

    g.setFont(new Font("黑体",Font.BOLD,15));
    g.setColor(Color.white);
    //g.drawString(c.get(c.DAY_OF_WEEK)+"",50,50);

    while(true)
    {

    if(c.get(c.DAY_OF_WEEK)==1||c.get(c.DAY_OF_WEEK)==7)
    g.setColor(Color.darkGray);

    else
    if(c.get(c.DAY_OF_MONTH)==todayDay)
    g.setColor(Color.red);

    else
    g.setColor(Color.blue);


    g.drawString(c.get(c.DAY_OF_MONTH)+"",50+(c.get(c.DAY_OF_WEEK)-1)*66,70+c.get(c.WEEK_OF_MONTH)*30);
    c.add(c.DAY_OF_YEAR,1);

    if(c.get(c.MONTH)>todayMonth)
    break;
    }

    }
    }
      

  2.   

    按照如下修改setDate方法即可
    public void setDate() { now = new GregorianCalendar(getYear(), getMonth(), 1); for (int i = 0; i < 42; i++) {// 全部按扭置为空
    btn[i].setText("");
    } int count = getDayweek() - 1;
    for (int i = 1; i <= getMaxDay(); i++) {// 添加日期到上面 btn[count].setText(String.valueOf(i));
    btn[count].setForeground(Color.BLACK);
    count++;
    }
    for (int i = 0; i < 42; i++) {// 全部按扭置为空
    if (i % 7 == 0 || i == 6 || i == 13 || i == 20 || i == 27
    || i == 34 || i == 41)// 设置星期天字颜色为红色
    btn[i].setForeground(Color.red);
    }
    setToday();
    }