改进java万年历,前几天看到别人写的java万年历,其中不足之处多多

本文介绍了一款改进的Java万年历程序,重点解决了原有版本中的一些不足,包括更高效地判断闰年和获取指定月份的天数,同时讨论了ActionEvent的使用和线程的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     昨天网上看到别人blog里面写的自己做的万年历不错,down下来看看,发现有些地方不妥。
     1。在java中获取指定年月的天数居然还用闰年来判断,感觉这个人java肯定用的不精。GregorianCalendar类里面有个方法
      isLeapYear(int year)
          确定给定的年份是否为闰年。
  用这个不就ok么?还像在c中那样做判断,能不能被4整除,被4整除不被100整除的。。。。
   获取指定年月的天数
None.gif        Date date = new Date(year_log, month_log + 11); // now
None.gif
        Calendar cal = Calendar.getInstance();
None.gif        cal.setTime(date);
None.gif        cal.add(Calendar.MONTH, 
-1); // 前个月
None.gif
        month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天
  2。对java中的ActionEvent不熟,不知道JComboBox等什么时候应该触发什么event。
  3。对线程理解不好。
11.bmp
我把改进后的java代码贴上来,大家看看,里面肯定还有不足之处。
主类:MainFrame
None.gifpackage clock;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * MainFrame.java
InBlock.gif * Summary 万年历主类
InBlock.gif * Created on
InBlock.gif * 
@author
InBlock.gif * remark 如有改动请发一份代码给我,邮箱wsh.grxx@163.com
ExpandedBlockEnd.gif 
*/

None.gif
None.gif
import java.awt.BorderLayout;
None.gif
import java.awt.Color;
None.gif
import java.awt.GridLayout;
None.gif
import java.awt.Toolkit;
None.gif
import java.awt.event.ActionEvent;
None.gif
import java.awt.event.ActionListener;
None.gif
import java.sql.Date;
None.gif
import java.util.Calendar;
None.gif
None.gif
import javax.swing.JComboBox;
None.gif
import javax.swing.JFrame;
None.gif
import javax.swing.JLabel;
None.gif
import javax.swing.JPanel;
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
class MainFrame extends JFrame dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/** *//**
InBlock.gif     * 
ExpandedSubBlockEnd.gif     
*/

InBlock.gif    
private static final long serialVersionUID = 1L;
InBlock.gif    JPanel panel 
= new JPanel(new BorderLayout());
InBlock.gif    JPanel panel1 
= new JPanel();
InBlock.gif    JPanel panel2 
= new JPanel(new GridLayout(77));
InBlock.gif    JPanel panel3 
= new JPanel();
InBlock.gif    JLabel[] label 
= new JLabel[49];
InBlock.gif    JLabel y_label 
= new JLabel("年份");
InBlock.gif    JLabel m_label 
= new JLabel("月份");
InBlock.gif    JComboBox com1 
= new JComboBox();
InBlock.gif    JComboBox com2 
= new JComboBox();
InBlock.gif    
int re_year, re_month;
InBlock.gif    
int x_size, y_size;
InBlock.gif    String year_num;
InBlock.gif    Calendar now 
= Calendar.getInstance(); // 实例化Calendar
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif    MainFrame() 
dot.gif{
InBlock.gif        
super("万年历");
InBlock.gif        setSize(
300350);
InBlock.gif        x_size 
= (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
InBlock.gif        y_size 
= (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
InBlock.gif        setLocation((x_size 
- 300/ 2, (y_size - 350/ 2);
InBlock.gif        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
InBlock.gif        panel1.add(y_label);
InBlock.gif        panel1.add(com1);
InBlock.gif        panel1.add(m_label);
InBlock.gif        panel1.add(com2);
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 0; i < 49; i++dot.gif{
InBlock.gif            label[i] 
= new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中
InBlock.gif
            panel2.add(label[i]);
ExpandedSubBlockEnd.gif        }

InBlock.gif        panel3.add(
new Clock(this));
InBlock.gif        panel.add(panel1, BorderLayout.NORTH);
InBlock.gif        panel.add(panel2, BorderLayout.CENTER);
InBlock.gif        panel.add(panel3, BorderLayout.SOUTH);
InBlock.gif        panel.setBackground(Color.white);
InBlock.gif        panel1.setBackground(Color.white);
InBlock.gif        panel2.setBackground(Color.white);
InBlock.gif        panel3.setBackground(Color.white);
InBlock.gif        Init();
InBlock.gif        com1.addActionListener(
new ClockAction());
InBlock.gif        com2.addActionListener(
new ClockAction());
InBlock.gif
InBlock.gif        setContentPane(panel);
InBlock.gif        setVisible(
true);
InBlock.gif        setResizable(
false);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
class ClockAction implements ActionListener dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
public void actionPerformed(ActionEvent arg0) dot.gif{
InBlock.gif            
int c_year, c_month, c_week;
InBlock.gif            c_year 
= Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份
InBlock.gif
            c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1// 得到当前月份,并减1,计算机中的月为0-11
InBlock.gif
            c_week = use(c_year, c_month); // 调用函数use,得到星期几
InBlock.gif
            Resetday(c_week, c_year, c_month); // 调用函数Resetday
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockEnd.gif    }

InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void Init() dot.gif{
InBlock.gif        
int year, month_num, first_day_num;
ExpandedSubBlockStart.gifContractedSubBlock.gif        String log[] 
= dot.gif"""""""""""""" };
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 0; i < 7; i++dot.gif{
InBlock.gif            label[i].setText(log[i]);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 0; i < 49; i = i + 7dot.gif{
InBlock.gif            label[i].setForeground(Color.red); 
// 将星期日的日期设置为红色
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 6; i < 49; i = i + 7dot.gif{
InBlock.gif            label[i].setForeground(Color.green);
// 将星期六的日期设置为绿色
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 1; i < 10000; i++dot.gif{
InBlock.gif            com1.addItem(
"" + i);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 1; i < 13; i++dot.gif{
InBlock.gif            com2.addItem(
"" + i);
ExpandedSubBlockEnd.gif        }

InBlock.gif        month_num 
= (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份
InBlock.gif
        year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份
InBlock.gif
        com1.setSelectedIndex(year - 1); // 设置下拉列表显示为当前年
InBlock.gif
        com2.setSelectedIndex(month_num); // 设置下拉列表显示为当前月
InBlock.gif
        first_day_num = use(year, month_num);
InBlock.gif        Resetday(first_day_num, year, month_num);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public int use(int reyear, int remonth) dot.gif{
InBlock.gif        
int week_num;
InBlock.gif        now.set(reyear, remonth, 
1); // 设置时间为所要查询的年月的第一天
InBlock.gif
        week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期
InBlock.gif
        return week_num;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    @SuppressWarnings(
"deprecation")
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void Resetday(int week_log, int year_log, int month_log) dot.gif{
InBlock.gif        
int month_day_score; // 存储月份的天数
InBlock.gif
        int count;
InBlock.gif        month_day_score 
= 0;
InBlock.gif        count 
= 1;
InBlock.gif
InBlock.gif        Date date 
= new Date(year_log, month_log + 11); // now
InBlock.gif
        Calendar cal = Calendar.getInstance();
InBlock.gif        cal.setTime(date);
InBlock.gif        cal.add(Calendar.MONTH, 
-1); // 前个月
InBlock.gif
        month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = 7; i < 49; i++dot.gif// 初始化标签
InBlock.gif
            label[i].setText("");
ExpandedSubBlockEnd.gif        }

InBlock.gif        week_log 
= week_log + 6// 将星期数加6,使显示正确
InBlock.gif
        month_day_score = month_day_score + week_log;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (int i = week_log; i < month_day_score; i++, count++dot.gif{
InBlock.gif            label[i].setText(count 
+ "");
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值