我想将jxdatepicker与maskFormatter一起使用。我试过了

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


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

第一个解决方案和第二个解决方案均无效

PS:
一个JFormattedTextFieldMaskFormatter一起正常工作
AND jXDatePicker与一个简单的JFormattedTextField一起正常工作

最佳答案

这是一个古老的问题,但似乎仍然很活跃,因此这是我们前一段时间实现该功能的方式(swingx-all-1.6.5-1.jar):

1)为 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);

包装器类基本上进行格式化,因为尝试在DateFormat上设置JXDatePicker会导致各种ParseException

09-27 10:02