如何将jXDatePicker与maskFormatter一起使用?

2022-09-03 03:04:51

我想使用带有maskFormatter的jxdatepicker。我试过了

MaskFormatter maskFormatter = new MaskFormatter ("##/##/####");
JFormattedTextField field=new JFormattedTextField (maskFormatter);
jXDatePicker.setEditor (field);

MaskFormatter maskFormatter = new MaskFormatter ("##/##/####");
maskFormatter.install (jXDatePicker.getEditor ());

第一种和第二种解决方案都不起作用

PS:一个工作精细与和工作精细与简单JFormattedTextFieldMaskFormatterjXDatePickerJFormattedTextField


答案 1

这是一个老问题,但似乎仍然处于活动状态,因此以下是我们前段时间如何实现该功能():

1)创建一个包装器类swingx-all-1.6.5-1.jar MaskFormatter

public class Wrapper extends MaskFormatter {

private final static String DD_MM_YYY = "dd/MM/yyyy";

public Wrapper(String string) throws ParseException {
    super(string);

}

@Override
public Object stringToValue(String value) throws ParseException {

    SimpleDateFormat format = new SimpleDateFormat(DD_MM_YYY);
    Date parsed = format.parse(value);
    return parsed;

}

public String valueToString(Object value) throws ParseException {
    if (value != null) {
        SimpleDateFormat format = new SimpleDateFormat(DD_MM_YYY);
        String formated = format.format((Date) value);
        return super.valueToString(formated);
    } else {
        return super.valueToString(value);
    }

  }

}


2) 将包装的格式化程序添加到 中,并将其设置在JFormattedTextField JXDatePicker

MaskFormatter maskFormatter;
JXDatePicker datePicker = new JXDatePicker();
try {
        maskFormatter = new Wrapper("##/##/####");
        JFormattedTextField field = new JFormattedTextField(maskFormatter);
        datePicker.setEditor(field);
} catch (ParseException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
}
somePanel.add(datePicker);

包装类基本上做格式化,因为试图在导致各种.DateFormatJXDatePickerParseException


答案 2

就我个人而言,我对Java不是很熟练,但在快速检查了一些文档之后。我认为这不是要走的路。与你一起似乎走向正确的方向。像这样的东西可能会帮助你:setEditormaskFormatter.install

JXDatePicker picker = new JXDatePicker();
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
picker.setFormats(format);

选择性来源:JXDatePicker使用SimpleDateFormat将dd.MM.yy格式化为dd.MM.yyyy与当前世纪

或者看看这个:https://stackoverflow.com/a/9036979/4820655


推荐