如何在PostgreSQL场景下将jFormattedTextField日期改为日/月/年格式显示
问题根源
你直接调用rs.getString("cad_data")获取到的是PostgreSQL默认输出的yyyy-MM-dd格式字符串,和jFormattedTextField设置的##/##/####(对应dd/MM/yyyy)格式掩码规则不匹配,组件无法识别不符合格式要求的输入内容,因此启用掩码后不会展示内容。
修复步骤
- 不要直接用
getString读取日期字段,改为读取原生日期对象,再按照目标格式转换后赋值给文本框 - 代码修改如下:
首先导入依赖类:
import java.text.SimpleDateFormat; import java.util.Date; import java.sql.SQLException;
替换原有逻辑中给日期文本框赋值的代码:
if(rs.next()){ jFormattedTextFieldCPF.setText(rs.getString("cad_cpf")); jTextFieldNOME.setText(rs.getString("cad_nome")); jTextFieldIDADE.setText(rs.getString("cad_idade")); jTextFieldAPELIDO.setText(rs.getString("cad_apelido")); // 修改日期字段赋值逻辑 Date cadData = rs.getDate("cad_data"); if(cadData != null){ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); String formattedDate = dateFormat.format(cadData); // 如果你的日期组件是jFormattedTextField,替换jTextFieldDATA为对应组件名即可 jTextFieldDATA.setText(formattedDate); } jFormattedTextFieldPROCURAR.setText(""); //deixa o campo vazio jFormattedTextFieldCPF.setEnabled(false); jTextFieldNOME.setEnabled(true); jTextFieldIDADE.setEnabled(true); jTextFieldDATA.setEnabled(true); jTextFieldAPELIDO.setEnabled(true); jButtonExcluir.setEnabled(true); jButtonALTERAR.setEnabled(true); jButtonSalvar.setEnabled(false); jButtonINSERIR.setEnabled(false); }
附加注意事项
- 如果日期输入组件为
jFormattedTextField,建议初始化时同步配置格式校验规则,避免用户输入异常:
import javax.swing.text.MaskFormatter; // 初始化组件时添加 try { MaskFormatter dateMask = new MaskFormatter("##/##/####"); dateMask.setPlaceholderCharacter('_'); dateMask.install(jFormattedTextFieldDATA); } catch (Exception e) { e.printStackTrace(); }
- 提交数据回PostgreSQL时,需要把
dd/MM/yyyy格式的字符串转回Date对象或者yyyy-MM-dd格式的字符串,避免入库时报格式错误。
内容的提问来源于stack exchange,提问作者Luís Felipe Ambrozin
相关产品推荐
相关产品推荐

