首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用冒泡排序对JTable进行排序?

如何使用冒泡排序对JTable进行排序?
EN

Stack Overflow用户
提问于 2011-04-06 04:51:15
回答 1查看 811关注 0票数 1

我想知道如何在DefaultTableModel上实现冒泡排序。(我知道有一个自动排序器,但我必须使用冒泡排序。)我已经知道如何使用冒泡排序,但不知道如何在DefaultTableModel上实现。我在考虑首先获取行值并将值存储到String[]中,然后对String[]进行排序,然后将其转换回String[][],然后再将其放回TableModel中。有没有更快的方法来做这件事?

编辑:有没有更好的方法呢?还在实现冒泡排序吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 07:16:21

在表模型(而不是外部数组)上使用冒泡排序的唯一原因是,我们可以通过查看表来观察排序过程。

因此,使用DefaultTableModelsetValueAtgetValueAt方法进行比较和交换。

代码语言:javascript
复制
class DTMSlowSorter {
   /**
    */
   private DefaultTableModel model;
   /**
    * the number of the column by which we want to sort
    */
   private int sortColNum;
   /**
    * the comparator for the elements.
    */
   private Comparator comparator;

   /**
    * The time to sleep between two sorting steps.
    */
   private int sleepTime = 500;

   /**
    * swaps the contents of two rows.
    */
   void swap(final int rowA, final int rowB) {
        try {
            EventQueue.invokeAndWait(new Runnable(){public void run() {
                int colCount = model.getColumnCount();
                Object[] temp = new Object[colCount];
                for(int i = 0; i < colCount; i++) {
                   temp[i] = model.getValueAt(rowA, i);
                }
                for(int i = 0; i < colCount; i++) {
                   model.setValueAt(model.getValueAt(rowB, i), rowA, i);
                }
                for(int i = 0; i < colCount; i++) {
                   model.setValueAt(temp[i], rowA, i);
                }
            }});
           Thread.sleep(sleepTime);
        } catch(InterruptedException ex) { ex.printStackTrace();}
   }

   /**
    * compares two rows.
    * @returns
    *      -1 if  A < B
    *       0 if  A = B
    *       1 if  A > B
    */
   int compare(int rowA, int rowB) {
       Object valA = model.getValueAt(rowA, sortColNum);
       Object valB = model.getValueAt(rowB, sortColNum);
       if(comparator != null) {
          return comparator.compare(valA, valB);
       }
       else {
          return ((comparable)valA).compareTo(valB);
       }
   }

   public void sort() {
      // here your bubblesort implementation, using compare and swap.
   }

}

(我希望我没有在这里完成您的全部作业,但至少您必须自己实现排序。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5558357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档