求一个java swing带界面的万年历代码

 我来答
紫薇参星
科技发烧友

2017-10-08 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3608万
展开全部

按照你的要求编写的Java swing 带界面的万年历代码如下

//日历
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CCI extends JFrame implements ActionListener{
 JButton jb1=new JButton("<<");
 JButton jb2=new JButton("<");
 JButton jb3=new JButton(">");
 JButton jb4=new JButton(">>");
 JPanel jp1=new JPanel();
 JPanel jp2=new JPanel();
 JPanel jp3=new JPanel();
 JPanel jp4=new JPanel();
 JLabel jl1=new JLabel();
 JLabel jl2=new JLabel();
 JLabel[]jl=new JLabel[49];
 String []week={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
 Calendar c=Calendar.getInstance();
 int year,month,day;
 int nowyear,nowmonth,nowday;
 CCI(){
  super("简单日历");
  nowyear=c.get(Calendar.YEAR);
  nowmonth=c.get(Calendar.MONTH)+1;
  nowday=c.get(Calendar.DAY_OF_MONTH);
  year=nowyear;
  month=nowmonth;
  day=nowday;
  String s=year+"年"+month+"月";
  jl1.setForeground(Color.RED);
  jl1.setFont(new Font(null,Font.BOLD,20));
  jl1.setText(s);
  jb1.addActionListener(this);
  jb2.addActionListener(this);
  jb3.addActionListener(this);
  jb4.addActionListener(this);
  jp1.add(jb1);jp1.add(jb2);jp1.add(jl1);jp1.add(jb3);jp1.add(jb4);
  jp2.setLayout(null);
  createMonthPanel();
  jp2.add(jp3);
  jl2.setFont(new Font(null,Font.BOLD,20));
  jl2.setText("今天是"+nowyear+"年"+nowmonth+"月"+nowday+"日");
  jp4.add(jl2);
  add(jp1,BorderLayout.NORTH);
  add(jp2,BorderLayout.CENTER);
  add(jp4,BorderLayout.SOUTH);
  setSize(500,500);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLocationRelativeTo(null);
  setVisible(true);
 }
 @Override
 public void actionPerformed(ActionEvent ae) {
  if(ae.getSource()==jb1){
   year=year-1;
   String s=year+"年"+month+"月";
   jl1.setText(s);
   jp3.removeAll();
   createMonthPanel();
   jp3.validate();
  }
  if(ae.getSource()==jb2){
   if(month==1){
    year=year-1;
    month=12;
   }else{
    month=month-1;
   }
   String s=year+"年"+month+"月";
   jl1.setText(s);
   jp3.removeAll();
   createMonthPanel();
   jp3.validate();
  }
  if(ae.getSource()==jb3){
   if(month==12){
    year=year+1;
    month=1;
   }else{
    month=month+1;
   }
   String s=year+"年"+month+"月";
   jl1.setText(s);
   jp3.removeAll();
   createMonthPanel();
   jp3.validate();
  }
  if(ae.getSource()==jb4){
   year=year+1;
   String s=year+"年"+month+"月";
   jl1.setText(s);
   jp3.removeAll();
   createMonthPanel();
   jp3.validate();
  }
 }
 public static void main(String[] args) {
  new CCI();
 }
 public int getMonthDays(int year, int month) { 
  switch (month) {
   case 1: 
   case 3: 
   case 5: 
   case 7:
   case 8: 
   case 10: 
   case 12:
    return 31; 
   case 2: 
    if ((year%4==0&&year%100!=0)||year%400==0) { 
     return 29; 
    } else { 
     return 28; 
    } 
   default: 
    return 30; 
  } 
 } 
 public void createMonthPanel(){
  c.set(year, month-1, getMonthDays(year,month));
  int weekOfMonth=c.get(Calendar.WEEK_OF_MONTH);
  if(weekOfMonth==6){
   jp3.setLayout(new GridLayout(7,7));
   jp3.setBounds(50, 20, 420, 350);
  }else{
   jp3.setLayout(new GridLayout(6,7));
   jp3.setBounds(50, 20, 420, 300);
  }
  jp3.setBorder(BorderFactory.createEtchedBorder());
  for(int i=0;i<7;i++){
   jl[i]=new JLabel(week[i],JLabel.CENTER);
   jl[i].setFont(new Font(null,Font.BOLD,20));
   jl[i].setBorder(BorderFactory.createEtchedBorder());
   jp3.add(jl[i]);
  }
  c.set(year, month-1, 1);
  int emptyFirst=c.get(Calendar.DAY_OF_WEEK)-1;
  int daysOfMonth=getMonthDays(year,month);
  for(int i=6+emptyFirst;i>=7;i--){
   int intyear=year;
   int intmonth=month;
   if(intmonth==1){
    intyear=intyear-1;
    intmonth=12;
   }else{
    intmonth=intmonth-1;
   }
   int intdays=getMonthDays(intyear,intmonth);
   jl[i]=new JLabel((intdays+7-i)+"",JLabel.CENTER);
   jl[i].setFont(new Font(null,Font.BOLD,20));
   jl[i].setForeground(Color.GRAY);
   jl[i].setBorder(BorderFactory.createEtchedBorder());
   jp3.add(jl[i]);
  }
  for(int i=7+emptyFirst;i<daysOfMonth+7+emptyFirst;i++){
   jl[i]=new JLabel((i-7-emptyFirst+1)+"",JLabel.CENTER);
   jl[i].setFont(new Font(null,Font.BOLD,20));
   if((i+1)%7==0 || (i+1)%7==1){
    jl[i].setForeground(Color.RED);
   }else if((i-7-emptyFirst+1)==nowday&&month==nowmonth&&year==nowyear)
    jl[i].setForeground(Color.BLUE);
   else
    jl[i].setForeground(Color.BLACK);
   
   jl[i].setBorder(BorderFactory.createEtchedBorder());
   jp3.add(jl[i]);
  }
  if(weekOfMonth==6)
   for(int i=48;i>=daysOfMonth+emptyFirst+7;i--){
    jl[i]=new JLabel((49-i)+"",JLabel.CENTER);
    jl[i].setFont(new Font(null,Font.BOLD,20));
    jl[i].setForeground(Color.GRAY);
    jl[i].setBorder(BorderFactory.createEtchedBorder());
    jp3.add(jl[i]);
   }
  else
   for(int i=41;i>=daysOfMonth+emptyFirst+7;i--){
    jl[i]=new JLabel((42-i)+"",JLabel.CENTER);
    jl[i].setFont(new Font(null,Font.BOLD,20));
    jl[i].setForeground(Color.GRAY);
    jl[i].setBorder(BorderFactory.createEtchedBorder());
    jp3.add(jl[i]);
   }
 }
}
匿名用户
2017-10-08
展开全部
需求是一句话,但写起来还是费点神,,,,所以请先百度找

~
~
~
~~~~~~~~~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式