【问题标题】:How to use jXDatePicker with maskFormatter?如何将 jXDatePicker 与 maskFormatter 一起使用?
【发布时间】:2016-08-19 23:29:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您能否详细解释一下您的预期,以及什么不起作用
  • 我想在此页面link 的日期输入中做同样的事情,但与JXDatePicker 保持一致如果我将JFormattedTextFieldMaskFormatter 一起使用,我得到了预期的结果,但是我想使用JXDatePicker,这样用户就可以用鼠标选择日期或用键盘输入日期,正如我在问题中所说,MaskFormatter 不适用于JXDatePicker

标签: java swing datepicker swingx maskformatter


【解决方案1】:

这是一个老问题,但似乎仍然很活跃,所以这是我们前段时间实现该功能的方式(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);

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

【讨论】:

    【解决方案2】:

    我个人对 Java 不是很熟练,但是在快速检查了一些文档之后。我认为setEditor 不是要走的路。使用maskFormatter.install,您似乎朝着正确的方向前进。这样的事情可能会帮助你:

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

    选择性来源:JXDatePicker using SimpleDateFormat to format dd.MM.yy to dd.MM.yyyy with current century

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

    【讨论】:

    • 不,它只会以这种方式格式化日期,但用户仍然必须输入/ 字符,我想要的是类似于此页面中输入的日期link
    • @Billydan 那么来自stackoverflow.com/a/9036979/4820655DatePickerFormatter formatter = new DatePickerFormatter( 代码呢?
    • 也许@kleopatra 可以帮助你解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2023-03-13
    • 2014-09-25
    • 2016-01-30
    • 2015-12-13
    • 2020-09-15
    • 2020-06-03
    相关资源
    最近更新 更多