以下文档后我使用的是Java 8:
我想在编辑JTable中的列时设置专门的格式化程序.此列包含java.time.LocalTime
实例.
JTable table;
...
table.setDefaultEditor(LocalTime.class, new LocalTimeEditor());
Run Code Online (Sandbox Code Playgroud)
其中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));
Run Code Online (Sandbox Code Playgroud)
但这会导致以下编译错误:
The constructor DefaultFormatterFactory(DateTimeFormatter) is undefined
Run Code Online (Sandbox Code Playgroud)
我想远离涉及SimpleDateFormat
(+ DateFormatter
)的解决方案,如此处或此处所述,因为java.util.Date
应该被视为遗留(请参阅此处的旧代码).
是否有整合的解决方案DateTimeFormatter
用JFormattedTextField
,还是我阻止:
我也想远离MaskFormatter,因为它不允许像以下那样简单的错误处理:"25:70:90"
.
根据 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
由此我可以解析并显示 LocalTime,尽管在我的实现中它非常笨拙。
归档时间: |
|
查看次数: |
158 次 |
最近记录: |