布局与日历

一个简单的Java日历程序,有一个窗口,该窗口为BorderLayout布局。
窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GridLayout布局,
pCenter的中放置49个标签,用来显示日历。
窗口北面添加一个Panel容器pNorth,其布局是FlowLayout布局,
pNorth放置两个按钮:nextMonth和previousMonth按钮,单击nextMonth,
可以显示当前月的下一个月的日历;单击previousMonth按钮,可以显示当前月的上一个月的日历。
窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签来显示一些信息。
public class CalendarMainClass {
    public static void main(String[] args) {
         CalendarFrame frame=new CalendarFrame();
         frame.setBounds(100,100,360,300);
         frame.setVisible(true);
         frame.setYearAndMonth(2015,5);
    }
}

public class CalendarBean {
    String day[];
    int year=2005,month=0;
    public void setYear(int year){
        this.year=year;
    }

    public int getYear(){
        return year;
    }

    public void setMonth(int month){
        this.month=month;
    }

    public int getMonth(){
        return month;
    }

    public String[] getCalendar(){
        String a[] = new String[42];
        Calendar 日历 =Calendar.getInstance();
        日历.set(year,month-1,1);
        int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
        int day=0;
        if (month==1||month==3||month==5||month==7||month==8||month==10||month==12){
            day=31;
        }
        if (month==4||month==6||month==9||month==11){
            day=30;
        }
        if(month==2){
            if(((year%4==0)&&(year%100!=0))||(year%400==0))
            {
                day=29;
            }else {
                day=28;
            }
        }
        for (int i=星期几,n=1;i<星期几+day;i++){
            a[i]=String.valueOf(n);
            n++;
        }
        return a;
    }

}
public class CalendarFrame extends JFrame implements ActionListener {
    JLabel[] labelDay = new JLabel[42];
    JButton[] titleName = new JButton[7];
    String[] name = {"日","一","二","三","四","五","六"};
    JButton nextMonth,previousMonth;
    CalendarBean calendar;
    JLabel showMessage = new JLabel("",JLabel.CENTER);
    int year=2011,month=2;
    public CalendarFrame(){
        JPanel pCenter=new JPanel();
        pCenter.setLayout(new GridLayout(7,7));
        for(int i=0;i<7;i++){
            titleName[i]=new JButton(name[i]);
            titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
            pCenter.add(titleName[i]);
        }
        for(int i=0;i<42;i++){
            labelDay[i]=new JLabel("",JLabel.CENTER);
            labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
            pCenter.add(labelDay[i]);
        }
        calendar=new CalendarBean();
        nextMonth= new JButton("下月");
        previousMonth=new JButton("上月");
        nextMonth.addActionListener(this);
        previousMonth.addActionListener(this);
        JPanel pNorth= new JPanel(),pSouth=new JPanel();
        pNorth.add(previousMonth);
        pNorth.add(nextMonth);
        pSouth.add(showMessage);
        add(pCenter,BorderLayout.CENTER);
        add(pNorth,BorderLayout.NORTH);
        add(pSouth,BorderLayout.SOUTH);
        setYearAndMonth(year,month);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    public void setYearAndMonth(int y, int m) {
        calendar.setMonth(m);
        calendar.setYear(y);
        String[] day= calendar.getCalendar();
        for(int i=0;i<42;i++){
            labelDay[i].setText(day[i]);
        }
        showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==nextMonth){
            month=month+1;
            if(month>12){
                month=1;
            }
            calendar.setMonth(month);
            String day[]=calendar.getCalendar();
            for(int i=0;i<42;i++){
                labelDay[i].setText(day[i]);
            }
        }
        else if(e.getSource()==previousMonth){
            month=month-1;
            if(month<1){
                month=12;
            }
            calendar.setMonth(month);
            String day[]=calendar.getCalendar();
            for(int i=0;i<42;i++){
                labelDay[i].setText(day[i]);
            }
        }
        showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
    }
}

运行结果如下:
在这里插入图片描述

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值