gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:47:34 27 4
gpt4 key购买 nike

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

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

最佳答案

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

因此,请使用 DefaultTableModelsetValueAtgetValueAt 方法进行比较和交换。这是一个例子。

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.
}

}

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

关于java - 如何使用冒泡排序对 JTable 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com