繁体   English   中英

Swing JTable按日期排序

[英]Swing JTable sort by Date

我想在一列中按日期对Jtable进行排序,但只以dd-MM-yyyy格式显示日期。 所以所有条目都是相同的,只是在不可见的秒数上有所不同。

我有一个TableModel,它使用以下方法获取数据:

@Override
public Object getValueAt(int row, int col) {

    Object[][] tableData = new Object[rowDataMap.keySet().size()][1];
    int index = 0;
    for (Long key : pane.nqm_messages.keySet())
    {
        Date date = rowDataMap.get(key);

        SimpleDateFormat form = new SimpleDateFormat("dd-MM-yyyy"); 
        String outputDate = form.format(date);

        tableData[index][0] = outputDate;

        index++;
    }
    return tableData[row][col];
}

这是我的TableRowSorter,我想对行进行排序:

TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
List<SortKey> keys = new ArrayList<SortKey>();

SortKey sortKey;
sorter.setComparator( 0, new Comparator<String>() {  
    @Override
    public int compare(String s1, String s2)  {
        //Sort dd-MM-yyyy 
    }
});

如果我这样做,我无法对它进行排序,因为字符串是obv。 全都一样。 当我直接使用这样的日期对象时

tableData [index] [0] =日期

我不知道如何以正确的格式显示它,但可以完成排序。

我如何实现这两个目标?

不要将Date对象转换为String 而是直接在模型中使用它们。 建议格式化不是模型的责任,而是使用TableCellRenderer

允许getValueAt返回Date对象。

修改表模式并重写getColumnClass方法,并返回approiate类的海闻的列(如Date.class )。

默认情况下,该表将为您设置Date对象的格式。

如果默认的TableCellRenderer不符合您的喜好,您可以提供自己的TableCellRenderer

有关更多详细信息,请参阅如何使用表 ,请特别注意使用自定义渲染器

每当displayinner逻辑不同时,您应该考虑使用TableModelCellRenderer 为什么不在日期列上添加CellRenderer? 单元格渲染器使用SimpleDateFormat渲染日期对象,但内部值仍为Date对象。 这样排序应该正常工作,因为分拣机处理内部值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM