加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 按日期排序的Swing JTable

发布时间:2020-12-15 04:11:25 所属栏目:Java 来源:网络整理
导读:我想在一列中按日期对Jtable进行排序,但只以dd-MM-yyyy格式显示日期.所以所有条目都是相同的,只是在不可见的秒数上有所不同. 我有一个TableModel,它使用以下方法获取数据: @Overridepublic Object getValueAt(int row,int col) { Object[][] tableData = ne
我想在一列中按日期对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

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

我如何实现这两个目标?

解决方法

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

允许getValueAt返回Date对象.

修改表模型并覆盖getColumnClass方法并返回hiven列的批准类(如Date.class).

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

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

有关详细信息,请参阅How to use tables,特别注意Using Custom Renderers

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读