我正在尝试让我的JTable显示对我的TableModel进行的更改,扩展AbstractTableModel。我做了一个Heap来插入所有文件,然后我在我的堆数组上应用了一个heapSort,所以这个有序数组应该是我的TableModel数据。它看起来像这样:
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()
中的有序数组替换Heap无序数组并使用getDatos()
返回它,但是JTable再次不会显示,我也检查了返回来自heapSort()
的数组并且运行良好,数据与getDatos()
中的数据相同但是有序。对此有任何帮助,非常感谢,谢谢。
答案 0 :(得分:3)
在getValueAt()方法中,您正在从数据对象中检索数据。
Documento doc = datos [rowIndex] .getDocumento();
因此,行数应基于数据对象中的行数。
public int getRowCount() {
//return heap.getNumNodos();
return datos.length;
}
getValueAt()方法不应该对数据进行排序。模型中的数据应该已经排序。在外部排序或在创建模型时对其进行排序。也就是说,getValueAt()方法不应该改变数据的结构。每次更改数据时,您都需要求助。