Jtable / ResultSet中的格式化日期

时间:2010-03-09 19:39:36

标签: java date jtable

我无法在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(.)为真,但我无法编辑日期单元格。你是怎么做到的?

4 个答案:

答案 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');
                        }
                    }