如何根据jtable中动态添加的列对行进行排序?

时间:2014-01-20 07:32:07

标签: java swing jtable tablesorter

已经存在jtable,我需要动态添加一列,然后为该列设置表格单元格渲染器,单元格渲染器是带有图标的jlabel。我已经完成了。

我的问题是:现在我需要根据表格单元格渲染器中使用的不同图标对该列进行排序,那么如何做到这一点呢?谢谢。

有相关代码:

    JTable table;// the table is already existed, I cannot change it

    TableColumn column = new TableColumn();

    column.setHeaderValue("Icon");
    column.setCellRenderer(new IconCellRenderer());

    table.addColumn(column);


public class IconCellRenderer extends DefaultTableCellRenderer
{
  private static final long serialVersionUID = 1L;

  public IconCellRenderer()
  {
    super();
  }

  @Override
  public Component getTableCellRendererComponent(JTable pTable, Object pValue,
      boolean pIsSelected, boolean pHasFocus, int pRow, int pColumn)
  {
    JLabel label = new JLabel();


    if (checkCondition(..))
    {
      label.setIcon(iconOne);
    } 
    else
    {
      label.setIcon(iconTwo));
    }

    label.setHorizontalAlignment(SwingConstants.CENTER);

    return label;
  }

}

1 个答案:

答案 0 :(得分:1)

为此,您可以使用TableRowSorter,并将Comparator设置为所需的列。在该比较器中,您可以比较单元格的值并对其进行排序:

TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
sorter.setComparator(0, new Comparator<Object>() {

    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
});
table.setRowSorter(sorter);

table是您的JTablemodel是您桌子的型号。

详细了解JTable中的sorting