Как использовать jXDatePicker с maskFormatter?

Я хотел бы использовать jxdatepicker с maskFormatter. Я старался

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

а также

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

ни первое, ни второе решение не сработало

PS: JFormattedTextField отлично работает с MaskFormatter И jXDatePicker отлично работает с простым JFormattedTextField


person Billydan    schedule 26.04.2016    source источник
comment
Можете ли вы объяснить больше о том, что вы ожидаете, и что не работает   -  person Madhan    schedule 05.05.2016
comment
Я хочу сделать то же самое при вводе даты на этой странице ссылка но в размахе с JXDatePicker Если я использую JFormattedTextField с MaskFormatter, я получаю ожидаемый результат, но я хочу использовать JXDatePicker, чтобы пользователь мог выбрать дату с помощью мыши или ввести ее с клавиатуры, и, как я сказал в вопросе, MaskFormatter не работает с JXDatePicker   -  person Billydan    schedule 08.05.2016


Ответы (2)


Это старый вопрос, но, похоже, он все еще актуален, поэтому вот как мы реализовали эту функциональность некоторое время назад (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.

person briadeus    schedule 21.11.2018

Лично я не очень хорошо разбираюсь в Java, но после быстрой проверки некоторых документов. Я думаю, что setEditor не подходит. С maskFormatter.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

person Bob Ortiz    schedule 10.05.2016
comment
Нет, это будет только отформатировать дату таким образом, но пользователь все равно должен ввести символ /, что я хочу, это что-то вроде ввода даты на этой странице ссылка - person Billydan; 10.05.2016
comment
@Billydan, а как насчет кода DatePickerFormatter formatter = new DatePickerFormatter( из stackoverflow.com/a/9036979/4820655? - person Bob Ortiz; 10.05.2016
comment
Может быть, @kleopatra сможет помочь вам с этим. - person Bob Ortiz; 10.05.2016