JTable определяет редактор для типа LocalTime
Я использую Java 8 после следующей документации:
Я хотел бы настроить специализированный форматтер при редактировании столбца в JTable. Этот столбец содержит java.time.LocalTime
экземпляры.
JTable table;
...
table.setDefaultEditor(LocalTime.class, new LocalTimeEditor());
Где LocalTimeEditor
определяется (предварительно):
public class LocalTimeEditor extends DefaultCellEditor {
JFormattedTextField ftf;
public LocalTimeEditor() {
super(new JFormattedTextField());
ftf = (JFormattedTextField) getComponent();
// Set up the editor for the LocalTime cells.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
ftf.setFormatterFactory(new DefaultFormatterFactory(dateFormatter));
Но это приводит к следующей ошибке компиляции:
The constructor DefaultFormatterFactory(DateTimeFormatter) is undefined
Я хотел бы держаться подальше от решения с участием SimpleDateFormat
(+ DateFormatter
), как описано здесь или здесь, так как java.util.Date
следует считать устаревшим (см. старый код здесь).
Есть ли решение для интеграции DateTimeFormatter
с JFormattedTextField
, или я заблокирован:
Я также хотел бы держаться подальше от MaskFormatter, так как это не позволяет легко обрабатывать ошибки для чего-то вроде: "25:70:90"
.
Ответы
Ответ 1
В соответствии с аргументом DefaultFormatterFactor я создал новый JFormattedTextField.AbstractFormatter
class JTFormater extends JFormattedTextField.AbstractFormatter{
final DateTimeFormatter formatter;
public JTFormater(DateTimeFormatter formatter){
this.formatter = formatter;
}
@Override
public Object stringToValue(String text) throws ParseException {
return formatter.parse(text);
}
@Override
public String valueToString(Object value) throws ParseException {
if(value instanceof TemporalAccessor){
return formatter.format((TemporalAccessor) value);
} else{
throw new ParseException("not a valid type at", 0);
}
}
}
Из этого я мог разобрать и отобразить LocalTime, хотя в моей реализации он довольно неуклюжий.