簡體   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