Jtable / ResultSet中的格式化日期

我在JTable中以我想要的格式显示Date s时遇到问题。 我的JTable是使用ResultSet和列表创建的。

我在getValueAt(.)尝试了以下操作,但没有运气:

  if(value instanceof Date) { //System.out.println("isDate"); DateFormat formatter = DateFormat.getDateInstance(); SimpleDateFormat f = new SimpleDateFormat("MM/dd/yy"); value = f.format(value); Date parsed = (Date) value; try { parsed = (Date) f.parse(value.toString()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } value = parsed.toString(); } 

println(.)永远不会打印,因此它甚至没有打印出来。 正在显示的格式是Apr 10, 1992但我想要04/10/92

虽然我们讨论的是isCellEditable(.)Date主题…我将isCellEditable(.)视为真,但我无法编辑Date单元格。 你怎么做到这一点?

不要覆盖getValue ,而是使用TableCellRenderer

 TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer() { SimpleDateFormat f = new SimpleDateFormat("MM/dd/yy"); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if( value instanceof Date) { value = f.format(value); } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }; table.getColumnModel().getColumn(0).setCellRenderer(tableCellRenderer); 

正在显示的格式是1992年4月10日

听起来像Date的toString()表示存储在TableModel而不是Date对象。 因此,您需要检查数据如何从ResultSet复制到TableModel。 确保使用resultSet.getObject()方法。 或者问题是您在数据库中存储的字符串格式与您看到的格式相同。

无论如何,一旦您能够在TableModel中实际存储Date对象,请查看表格格式渲染器 ,它允许您在一行代码中创建具有自定义日期格式的自定义渲染器。

您应该创建DefaultTableCellRenderer的子类并覆盖setValue(Object)然后为整列设置单元格渲染器。

 public class DateCellRenderer extends DefaultTableCellRenderer { public DateCellRenderer() { super(); } @Override public void setValue(Object value) { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy"); setText((value == null) ? "" : sdf.format(value)); } } 

然后在你的用户代码中做一些像JTable.getColumnModel().getColumn(index).setCellRenderer(new DateCellRenderer());

有一个第三方添加可用.. moment.js 。

只需通过nuget添加它,将脚本移动到您的内容脚本文件。 添加此行(示例)

使用Javascript:

  

然后我们在jtable中更改字段声明。

使用Javascript:

 DateAdded: { title: 'Date added', width: '20%', sorting: false, display: function (data) { return moment(data.record.DateAdded).format('DD/MM/YYYY HH:mm:ss'); } }