我想知道如何在DefaultTableModel上实现冒泡排序。(我知道有一个自动排序器,但我必须使用冒泡排序。)我已经知道如何使用冒泡排序,但不知道如何在DefaultTableModel上实现。我在考虑首先获取行值并将值存储到String[]中,然后对String[]进行排序,然后将其转换回String[][],然后再将其放回TableModel中。有没有更快的方法来做这件事?
编辑:有没有更好的方法呢?还在实现冒泡排序吗?
发布于 2011-04-06 07:16:21
在表模型(而不是外部数组)上使用冒泡排序的唯一原因是,我们可以通过查看表来观察排序过程。
因此,使用DefaultTableModel的setValueAt和getValueAt方法进行比较和交换。
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.
}
}(我希望我没有在这里完成您的全部作业,但至少您必须自己实现排序。)
https://stackoverflow.com/questions/5558357
复制相似问题