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

Java 在JXTable单元格中设置日期格式,java,datepicker,swingx,tablecelleditor,jxtable,Java,Datepicker,Swingx,Tablecelleditor,Jxtable,在上,我已经了解了如何将JXDatePicker添加到JXTable(或JTable)单元格中。但我现在有个小问题 日期选择器弹出并根据我的需要正常工作。但我无法更改单元格中日期的显示格式。它以以下长格式显示 Eg: Wed Aug 01 00:00:00 IST 2012 但是我需要它的dd-MMM-yyyy格式 我已尝试更改日期选择器编辑器的格式。这在一定程度上起了作用。也就是说,现在它根据设置的格式显示该单元格处于焦点时的日期。但当我关注其他单元格时,它又回到了上面的格式 可能故障不在d

在上,我已经了解了如何将JXDatePicker添加到JXTable(或JTable)单元格中。但我现在有个小问题

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

Eg: Wed Aug 01 00:00:00 IST 2012
但是我需要它的
dd-MMM-yyyy
格式

我已尝试更改
日期选择器编辑器的格式。这在一定程度上起了作用。也就是说,现在它根据设置的格式显示该单元格处于焦点时的日期。但当我关注其他单元格时,它又回到了上面的格式

可能故障不在
datepickercelletor
上,可能与
tableModel
有关。但是我想不出来。谢谢你的帮助


谢谢

这是因为只有在真正编辑单元格值时才使用TableCellEditor。在不处于编辑模式时,使用TableCellRenderer表示值


我建议阅读本文,以了解更多有关tablecells的渲染器和编辑器的概念。

根据您前面的问题,该过程基本相同,只是您希望使用渲染器而不是编辑器

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);

@阿努比斯:条条大路通罗马;)谢谢@MadProgrammer。在我之前的帖子[,
kleopatra
中,他给了我同样的答案,但是他实现
TableCellRenderer
的方法非常简单。谢谢他。。