我无法在Date
中以我想要的格式显示JTable
。我的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
虽然我们在Date
中讨论了JTables
的主题...我isCellEditable(.)
为真,但我无法编辑日期单元格。你是怎么做到的?
答案 0 :(得分:14)
请勿覆盖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);
答案 1 :(得分:5)
正在显示的格式是 1992年4月10日
听起来像Date的toString()表示存储在TableModel中而不是Date对象。因此,您需要检查数据如何从ResultSet复制到TableModel。确保使用resultSet.getObject()方法。或者问题是您在数据库中存储的字符串格式与您看到的格式相同。
无论如何,一旦你能够在TableModel中实际存储Date对象,请查看Table Format Renderers,它允许您在一行代码中创建具有自定义日期格式的自定义渲染器。
答案 2 :(得分:4)
您应该创建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());
答案 3 :(得分:-5)
有第三方添加可用.. moment.js。
只需通过nuget添加它,将脚本移动到您的内容脚本文件。添加此行(示例)
使用Javascript:
<script src="@Url.Content("~/Content/Scripts/moment.min.js")" type="text/javascript"></script>
然后我们在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');
}
}