JAVA实现年月日动态变化

用Java在实现用户注册,用户个人信息的修改等等业务中不可避免的会让用户输入出生年月,但是初次接触的小伙伴肯定会遇到这样一个问题,怎么让 JComboBox 中天数随着年月的变化而变化呢?比如3月的天数为31天,4月的天数为30天,2月的天数28或29天。下面笔者就来介绍实现这个功能的算法,

首先搭建好基本的框架,使主类继承JFrame,并实现ActionListener接口。

基本框架的搭建这里不再多讲,我们主要来了解一下天数随年月的变化如何实现,

先介绍基本的思路,然后在结合源代码具体分析:

思路:

当鼠标点击年下拉列表或者月下拉列表时,触发日下拉列表的ActionEvent事件,触发事件后,日下拉列表移除原先列表中所有的项,读取年下拉列表,月下拉列表中的值并转换成 int 类型,首先根据读取得到的月份数判断该月数是否是 4;6;9;11 ,若是,则日下拉列表中的最大数应该是30;若月数为2,则判断该年是否是闰年,若是闰年,则日下拉列表中最大数应该是29,若不是,则是28;除了以上5中情况,剩下的月对应的日下拉列表中的最大数都应该是31。最后通过循环将1到最大天数逐条添加到日下拉列表中。

OK! 下面就来分享源代码,

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;
import java.util.*;
public class ChangeDate extends JFrame implements ActionListener{
	JComboBox comYBox,comMBox,comDBox;
	String year,month,day;
	int days=31;
	ChangeDate(){
		setLayout(new FlowLayout());
		init();
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setVisible(true);
		setBounds(500,200,320,100);
		setResizable(true);
	}
	void init(){
		comYBox=new JComboBox();
        	comMBox=new JComboBox();
        	comDBox=new JComboBox();
        	Box baseBox=Box.createHorizontalBox();
        	baseBox.add(comYBox);
        	baseBox.add(new JLabel("年"));
        	baseBox.add(comMBox);
        	baseBox.add(new JLabel("月"));
        	baseBox.add(comDBox);
        	baseBox.add(new JLabel("日"));
        	add(baseBox);
        
        	for(int i=2017;i>=1917;i--){//初始化下拉列表中的值
            		comYBox.addItem(i);
        	}
        	for(int i=1;i<=12;i++){
            		comMBox.addItem(i);
        	}
        	for(int i=1;i<=31;i++){
            		comDBox.addItem(i);
        	}
        
        	comYBox.addActionListener(this);//为年,月下拉列表注册监听器
        	comMBox.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==comYBox || e.getSource()==comMBox){
			comDBox.removeAllItems();   //移除所有原来的项

            	int monthInNumber=Integer.parseInt(comMBox.getSelectedItem().toString());//读出月份数并转化为int型
            	int yearInNumber=Integer.parseInt(comYBox.getSelectedItem().toString()); //读出年份数并转化为int型
            
            	if(monthInNumber==4||monthInNumber==6||monthInNumber==9||monthInNumber==11){ //判断月份是否为4;6;9;11
                	days=30;
            	}
            	else if(monthInNumber==2){       
                	if(yearInNumber%400==0||(yearInNumber%4==0&&yearInNumber%100!=0)){ //判断是否为闰年
                    		days=29;
                	}
                	else
                	    	days=28;                                          
            		}
            	else{
                	days=31;
            	}
            	comDBox.addItem(" ");
            	for(int i=1;i<=days;i++){ //逐项添加到日下拉列表中
                	comDBox.addItem(i);             
            	}     
		}
	}
	public static void main(String args[]){
		new ChangeDate();
	}
}

OK , 源代码也分享完了,接下来我们来看一下执行结果吧!

首先选择 2017 年 2 月:


2017年不是闰年,所以2月份的天数是28天。

然后再来看看1999 年 5 月:


1999年 5 月的天数是31天,验证正确。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值