如何知道用户是否在Java的Swing中插入有效日期?

时间:2014-10-06 12:19:49

标签: java swing validation date

我正在创建一个项目,我应该在其中列出任何人的出生日期。所以为此,我采用了3个组合框:日期,月份和年份。但我怎么知道要插入的Datevalid,因为天数不同 - 不同的月份和年份不同。

有没有现成的GUI component用于从用户那里获取日期?

我正在使用Swing包进行设计。

我的示例代码是

import java.awt.*;
import javax.swing.*;

public class Pro1 extends JFrame
{

    JComboBox  dd, mm, yy;

    JLabel doblbl;

    Container con;

    public Pro1()
    {
        con = getContentPane(); 

        doblbl = new JLabel("Date of Birth :-");
        doblbl.setHorizontalAlignment(SwingConstants.CENTER);   

        doblbl.setFont(new Font("Arial",Font.BOLD,17));
        doblbl.setForeground(Color.blue);

        doblbl.setOpaque(true); 
        doblbl.setBackground(new Color(230,180,230));


        dd = new JComboBox();
        mm = new JComboBox();
        yy = new JComboBox();

        for(int i = 1; i<=31; i++)
            dd.addItem("" + i);

        for(int i = 1; i<=12; i++)
            mm.addItem("" + i);

        for(int i = 1960; i<=2014; i++)
            yy.addItem("" + i);


        con.setLayout(null); 

        setDefaultCloseOperation(EXIT_ON_CLOSE);    

        int i = 120;

        doblbl.setBounds(30,i+=40,270,30);

        int j = 120;

        dd.setBounds(350,j+=40,50,30);
        mm.setBounds(420,j,50,30);
        yy.setBounds(480,j,70,30);

        con.add(doblbl);

        con.add(dd);
        con.add(mm);
        con.add(yy);

        setSize(1500,800);
        setVisible(true);

        con.setBackground(new Color(125,80,140));           
    }

    public static void main(String s[])
    {
        Pro1 p1 = new Pro1();

    }
}

3 个答案:

答案 0 :(得分:2)

您可以使用SimpleDateFormat将日期解析或格式化为dd/MM/yyyy

示例代码:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String dateString = "30/02/2014"; // form date string in above format

String formattedDate = sdf.format(sdf.parse(dateString));
if (formattedDate.equals(dateString)) {
    System.out.println("valid date");
} else {
    System.out.println("Invalid date"); // It's an invalid date
}

答案 1 :(得分:2)

考虑向用户提供JSpinner SpinnerDateModel,然后用户可以更轻松地输入或滚动并选择有效日期。

enter image description here

import java.awt.*;
import java.util.*;
import javax.swing.*;

public class PromptForDate {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {}
                SpinnerDateModel dateModel = new SpinnerDateModel(
                        new Date(), null, null, Calendar.DAY_OF_MONTH );
                JSpinner dateSpinner = new JSpinner(dateModel);
                dateSpinner.setEditor(
                        new JSpinner.DateEditor(dateSpinner, "dd/MM/yyyy"));

                JOptionPane.showMessageDialog(
                        null, dateSpinner, "D.O.B.?", 
                        JOptionPane.QUESTION_MESSAGE);

                System.out.println(dateModel.getValue());
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 2 :(得分:1)

  

是否有用于从用户那里获取日期的现成GUI组件?

是的,标准API和第三方库中有多个选项,如this answer中所述:JSpinner + SpinnerDateModelJCalendarJXDatePicker 。这些组件也将解决这个问题:

  

但我怎么知道要插入的日期是   有效是因为不同月份的日期数和   年是不同的。


题外话

关于这个:

con.setLayout(null);
...
dd.setBounds(350,j+=40,50,30);
mm.setBounds(420,j,50,30);
yy.setBounds(480,j,70,30);
...
con.add(dd);
con.add(mm);
con.add(yy);

尽管使用Null layout是完全可能的,但Swing旨在与布局管理器一起使用,因此不鼓励使用null布局。请参阅此主题Why is it frowned upon to use a null layout in SWING?