我试图让我的JTable显示更改对我的TableModel进行扩展AbstractTableModel。我做了一个堆来插入所有的文档,然后我在堆数组上应用heapSort,所以这个有序数组应该是我的TableModel数据。它看起来像这样:AbstractTableModel不会更新JTable
public class ModeloTabla extends AbstractTableModel {
private Heap heap;
private Nodo[] datos;
@Override
public int getRowCount() {
return heap.getNumNodos();
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (!heap.empty()) {
datos = heap.heapSort();
}
Documento doc = datos[rowIndex].getDocumento();
switch (columnIndex) {
case 0:
return doc.getNombre();
case 1:
return doc.getHojas();
case 2:
return doc.getPrioridad();
default:
return null;
}
}
}
里面的getValueAt
方法当我打电话heap.heapSort()
堆内部数组被破坏,它返回一个有序的节点Nodo[]
。所以当datos
有一个有节点的有序数组时,我的JTable将不显示数据。现在,如果我不执行heap.heapSort()
,而只是从堆中调用无序数组,我的JTable将显示所有内容。
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
datos = heap.getDatos();
Documento doc = datos[rowIndex].getDocumento();
... //This works but datos is unordered
}
}
我试着更换与订购一堆无序阵列内heapSort()
和使用getDatos()
但随后JTable中再不会出现还,还我检查了返回数组从heapSort()
和它运行良好,数据与来自getDatos()
的数据相同,但已订购。任何帮助,将非常感激,谢谢。
谢谢,Nodo [] datos对象不是用模型创建的,我用它来存储'heapSort()'中的有序数组,因此我不能使用'datos.length',因为不是在那时创建。另外,我只是修改了getValueAt()方法来显示:'datos = heap.getDatos();'这将返回一个已排序的数组,但仍然不会显示。奇怪的是,JTable在直接使用堆阵列时显示模型,而不是在订购时显示模型。 – hkimgt
'所以我不能使用datos.length,因为那时还没有创建。“这是我的观点!应该在创建类时创建并包含有效的数据。 getValueAt()方法只做一件事,那就是从数据结构中获取值。它不会首先对数据结构进行排序。 – camickr
'奇怪的是,JTable在直接使用堆阵列时显示模型,而不是当它被命令时显示模型 - 也许你的堆排序不符合你的期望。为什么你甚至有一个堆类?你的TableModel不应该包含两个数据结构来保存数据。只需使用Collections API为您排序即可。或者使用JTable的排序功能。 – camickr