怎么在JComboBox里面设置年月日。
比如:我选择好了年、月,再根据年月判断这个月又多少天 并显示出来。

解决方案 »

  1.   

    comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2",.... }));可以这样来动态set
      

  2.   

    可以在JComboBox里面添加ItemListener实现这个效果import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;public class TestFrame extends JFrame
    {
    private JComboBox cbYear = new JComboBox();
    private JComboBox cbMonth = new JComboBox();
    private JComboBox cbDay = new JComboBox();

    public TestFrame()
    {
    initComboBoxes();

    this.setLayout(new FlowLayout());
    add(cbYear);
    add(cbMonth);
    add(cbDay);
    }

    private void initComboBoxes()
    {
    Calendar calendar = new GregorianCalendar();

    for (int i = 1900; i <= 2100; i++)
    {
    cbYear.addItem(i);
    }
    cbYear.setSelectedIndex(calendar.get(Calendar.YEAR) - 1900);

    for (int i = 1; i <= 12; i++)
    {
    cbMonth.addItem(i);
    }
    cbMonth.setSelectedIndex(calendar.get(Calendar.MONTH));

    int days = getDayInMonth((Integer) cbYear.getSelectedItem(), (Integer) cbMonth.getSelectedItem());
    for (int i = 1; i <= days; i++)
    {
    cbDay.addItem(i);
    }
    cbDay.setSelectedIndex(calendar.get(Calendar.DATE) - 1); //关键是下面两个添加Listener的代码
    cbYear.addItemListener(new ItemListener()
    {
    public void itemStateChanged(ItemEvent event)
    {
    if (event.getStateChange() == ItemEvent.SELECTED)
    {
    cbDay.removeAllItems();
    int days = getDayInMonth((Integer) cbYear.getSelectedItem(), (Integer) cbMonth.getSelectedItem());
    for (int i = 1; i <= days; i++)
    {
    cbDay.addItem(i);
    }
    cbDay.validate();
    }
    }
    });
    cbMonth.addItemListener(new ItemListener()
    {
    public void itemStateChanged(ItemEvent event)
    {
    if (event.getStateChange() == ItemEvent.SELECTED)
    {
    cbDay.removeAllItems();
    int days = getDayInMonth((Integer) cbYear.getSelectedItem(), (Integer) cbMonth.getSelectedItem());
    for (int i = 1; i <= days; i++)
    {
    cbDay.addItem(i);
    }
    cbDay.validate();
    }
    }
    });
    }

    private int getDayInMonth(int year, int month)
    {
    boolean yunnian = false;

    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    {
    yunnian = true;
    }
    switch (month)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    return 31;
    case 2:
    return yunnian ? 29 : 28;
    default:
    return 30;
    }
    }

    public static void main(String[] args)
    {
    JFrame frame = new TestFrame();
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }