Java 如何在文本字段中获取日期

Java 如何在文本字段中获取日期,java,swing,date,jtextfield,jformattedtextfield,Java,Swing,Date,Jtextfield,Jformattedtextfield,我是Java新手,在获取Textfield的日期格式时遇到问题。我想把用户输入的日期输入数据库。我尝试过使用JCalender,但它不起作用,因为我未能配置调色板。除了JCalender,还有其他选项吗?提前谢谢 以下是我到目前为止的情况: // Delivery Date Action tf3.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { char c

我是Java新手,在获取
Textfield
的日期格式时遇到问题。我想把用户输入的日期输入数据库。我尝试过使用
JCalender
,但它不起作用,因为我未能配置调色板。除了
JCalender
,还有其他选项吗?提前谢谢

以下是我到目前为止的情况:

// Delivery Date Action

              tf3.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if (!((c >= '0') && (c <= '9') ||
         (c == KeyEvent.VK_BACK_SPACE) ||
         (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_SLASH)))        
      {
        JOptionPane.showMessageDialog(null, "Please Enter Valid");
        e.consume();
      }
    }
  });


        tf3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
               int i = Integer.parseInt(tf3.getText());


            }
//交货日期操作
tf3.addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();

如果(!((c>='0')&&(c您可以放置三个不同的下拉框来指定日、月和年。您不需要检查其他验证。如果该月的日期为31,则可以选择闰年检查和订单日期<交货日期。

您可以放置三个不同的下拉框来指定日、月和年。您不需要检查其他验证。如果该月、闰年检查和订单日期<交货日期均可进行te

JFormattedTextField is a subclass of JTextField.

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
JFormattedTextField txtDate = new JFormattedTextField(df);
您可以在其上添加验证事件

txtDate .addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if (!((c >= '0') && (c <= '9') ||
         (c == KeyEvent.VK_BACK_SPACE) ||
         (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_SLASH)))        
      {
        JOptionPane.showMessageDialog(null, "Please Enter Valid");
        e.consume();
      }
    }
  });
txtDate.addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();
如果(!((c>='0')&&(c
您可以在其上添加验证事件

txtDate .addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if (!((c >= '0') && (c <= '9') ||
         (c == KeyEvent.VK_BACK_SPACE) ||
         (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_SLASH)))        
      {
        JOptionPane.showMessageDialog(null, "Please Enter Valid");
        e.consume();
      }
    }
  });
txtDate.addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();

如果(!((c>='0')&&(c可能您正在寻找JFormattedTextField


也许您正在寻找JFormattedTextField


将JFormattedTextField与数据格式一起使用


将JFormattedTextField与数据格式一起使用

基于,我编写了这个简单的类。我希望它能有所帮助

public class JDateTextField extends JFormattedTextField{

private final String format;
private final char datesep;
private Component pare = null;

/**
 * Establece el componente padre para los mensajes de dialogo.
 * <p>
 * @param pare
 */
public void setPare(Component pare) {
    this.pare = pare;
}

public JDateTextField(final String format) {
    super(new SimpleDateFormat(format));
    this.format = format;
    setColumns(format.length());
    //if(format.contains("-")) datesep=KeyEvent.VK_MINUS;
    //else
    if (format.contains("/")) {
        datesep = KeyEvent.VK_SLASH;
    } else {
        datesep = KeyEvent.VK_MINUS;
    }

    addFocusListener(new FocusAdapter() {
        @Override
        public void focusLost(FocusEvent e) {
            try {
                Date date = getDate();
            } catch(ParseException ex) {
                showError("Por favor introduzca una fecha válida.");
            }
        }
    });
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar();
            String s = "" + c;
            if (s.matches("|[a-z]|i")){
                showError("Carácter no válido detectado " + s);
                e.consume();
            } else if(!((c >= '0') && (c <= '9')
                    ||(c == KeyEvent.VK_BACK_SPACE)
                    ||(c == KeyEvent.VK_DELETE)
                    ||(c == datesep)||(c == KeyEvent.VK_COLON))){
                showError("Carácter no válido detectado " + c);
                e.consume();
            }
            /*
             * else{
             * try{
             * Date date=getDate();
             * }catch(ParseException ex){
             * showError("Por favor introduzca una fecha válida.");
             * }
             * }
             */
        }
    });
    setValue(new Date());
}

private void showError(String error) {
    JOptionPane.showMessageDialog(pare, error + "\n\tEl patrón válido es: " + format, "Fecha NO válida", JOptionPane.ERROR_MESSAGE);
}

public Date getDate() throws ParseException {
    SimpleDateFormat frt = new SimpleDateFormat(format);
    return frt.parse(getText());
}
公共类JDateTextField扩展了JFormattedTextField{
私有最终字符串格式;
私人最终字符日期9月;
私有组件pare=null;
/**
*在对话的过程中,我们需要一个组成部分。
*
*@param pare
*/
公共作废集料(部件集料){
this.pare=pare;
}
公共JDateTextField(最终字符串格式){
super(新的SimpleDataFormat(格式));
this.format=格式;
setColumns(format.length());
//如果(format.contains(“-”)datesep=KeyEvent.VK_减号;
//否则
if(格式为.contains(“/”){
datesep=KeyEvent.VK_斜杠;
}否则{
datesep=KeyEvent.VK_减号;
}
addFocusListener(新的FocusAdapter(){
@凌驾
公共无效焦点丢失(焦点事件e){
试一试{
日期=getDate();
}捕获(解析异常){
淋浴器(“我是一个女人。”);
}
}
});
addKeyListener(新的KeyAdapter(){
@凌驾
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();
字符串s=”“+c;
如果(s.匹配(“|[a-z]|i”)){
淋浴器(“车辆无válido detectado”+s);
e、 消费();
}如果(!((c>='0')&&(c基于),我已经编写了这个简单的类。我希望它能有所帮助

public class JDateTextField extends JFormattedTextField{

private final String format;
private final char datesep;
private Component pare = null;

/**
 * Establece el componente padre para los mensajes de dialogo.
 * <p>
 * @param pare
 */
public void setPare(Component pare) {
    this.pare = pare;
}

public JDateTextField(final String format) {
    super(new SimpleDateFormat(format));
    this.format = format;
    setColumns(format.length());
    //if(format.contains("-")) datesep=KeyEvent.VK_MINUS;
    //else
    if (format.contains("/")) {
        datesep = KeyEvent.VK_SLASH;
    } else {
        datesep = KeyEvent.VK_MINUS;
    }

    addFocusListener(new FocusAdapter() {
        @Override
        public void focusLost(FocusEvent e) {
            try {
                Date date = getDate();
            } catch(ParseException ex) {
                showError("Por favor introduzca una fecha válida.");
            }
        }
    });
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar();
            String s = "" + c;
            if (s.matches("|[a-z]|i")){
                showError("Carácter no válido detectado " + s);
                e.consume();
            } else if(!((c >= '0') && (c <= '9')
                    ||(c == KeyEvent.VK_BACK_SPACE)
                    ||(c == KeyEvent.VK_DELETE)
                    ||(c == datesep)||(c == KeyEvent.VK_COLON))){
                showError("Carácter no válido detectado " + c);
                e.consume();
            }
            /*
             * else{
             * try{
             * Date date=getDate();
             * }catch(ParseException ex){
             * showError("Por favor introduzca una fecha válida.");
             * }
             * }
             */
        }
    });
    setValue(new Date());
}

private void showError(String error) {
    JOptionPane.showMessageDialog(pare, error + "\n\tEl patrón válido es: " + format, "Fecha NO válida", JOptionPane.ERROR_MESSAGE);
}

public Date getDate() throws ParseException {
    SimpleDateFormat frt = new SimpleDateFormat(format);
    return frt.parse(getText());
}
公共类JDateTextField扩展了JFormattedTextField{
私有最终字符串格式;
私人最终字符日期9月;
私有组件pare=null;
/**
*在对话的过程中,我们需要一个组成部分。
*
*@param pare
*/
公共作废集料(部件集料){
this.pare=pare;
}
公共JDateTextField(最终字符串格式){
super(新的SimpleDataFormat(格式));
this.format=格式;
setColumns(format.length());
//如果(format.contains(“-”)datesep=KeyEvent.VK_减号;
//否则
if(格式为.contains(“/”){
datesep=KeyEvent.VK_斜杠;
}否则{
datesep=KeyEvent.VK_减号;
}
addFocusListener(新的FocusAdapter(){
@凌驾
公共无效焦点丢失(焦点事件e){
试一试{
日期=getDate();
}捕获(解析异常){
淋浴器(“我是一个女人。”);
}
}
});
addKeyListener(新的KeyAdapter(){
@凌驾
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();
字符串s=”“+c;
如果(s.匹配(“|[a-z]|i”)){
淋浴器(“车辆无válido detectado”+s);
e、 消费();

}否则,如果(!((c>='0')&&(c)您希望在日期字段文本框中使用数据格式进行日期标注,而不是使用JTextField(并将用户限制为特定语法),则使用三个JComboBox(月、日、年)会更容易作为输入选项。不要使用键侦听器,它们会干扰文档更新,并且您不知道在事件链中调用的位置。最好使用。您还可以查看希望在日期字段文本框中使用数据格式的日期,而不是使用JTextField(并将用户限制为特定语法),使用三个JComboBox(月、日、年)会更容易作为输入选项。不要使用密钥侦听器,它们会干扰文档更新,并且您不知道在事件链中调用的位置。最好使用。您还可以只查看最后提到的三个验证+应用程序特定的任何验证。只查看最后提到的三个验证+应用程序特定的任何验证特定验证。您还可以使用正则表达式验证其正确的日期格式。不需要将
KeyListener
与Swing中的文本组件结合使用。使用
DocumentFilter
s或
DocumentListener
s代替您也可以使用正则表达式验证其正确的日期格式。不需要使用
KeyListener
与Swing中的文本组件结合使用。请改用
DocumentFilter
s或
DocumentListener
s