用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天,验证正确。