在JXTable单元格中设置日期格式

时间:2012-08-06 06:17:55

标签: java datepicker swingx tablecelleditor jxtable

On this thread我已经想出如何将JXDatePicker添加到JXTable(或JTable)单元格中。但我现在有一个小问题。

DatePicker弹出并根据我的需要正常工作。但我无法更改单元格中日期的显示格式。它以下面的长格式显示。

Eg: Wed Aug 01 00:00:00 IST 2012

但我需要dd-MMM-yyyy格式。

我尝试更改DatePickerCellEditor的格式。它部分有效。这意味着,现在它在该单元格处于焦点时根据设置的格式显示日期。但是当我专注于其他一些细胞时,它又会回到上面的格式。

可能是DatePickerCellEditor错误,可能是tableModel可能有问题。但无法弄清楚。任何帮助表示赞赏..

谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为当您真正编辑单元格值时,仅使用TableCellEditor。为了表示值,在不使用编辑模式的情况下,使用TableCellRenderer。

我建议您阅读此article以了解有关tablecells的渲染器和编辑器概念的更多信息。

答案 1 :(得分:1)

根据你之前的问题,除了你想使用渲染器而不是编辑器之外,它的过程几乎相同

public class DateCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable jtable, Object value, boolean selected, boolean hasFocus, int row, int column) {

        if (value instanceof Date) {

            // You could use SimpleDateFormatter instead
            value = DateFormat.getDateInstance().format(value);

        }


        return super.getTableCellRendererComponent(jtable, value, selected, hasFocus, row, column);

    }

然后,要应用渲染,您可以将其应用于特定列(因此只有该列将使用它),或者在类似Date的情况下,您可能希望将其用于所有列,使用Date值......

JTable table = new JTable();

DateCellRenderer renderer = new DateCellRenderer();
// Apply for a single column
table.getColumnModel().getColumn(0).setCellRenderer(renderer);
// OR apply for all columns using the Date class
table.setDefaultRenderer(Date.class, renderer);