1

我正在尝试让我的 JTable 显示对扩展 AbstractTableModel 的 TableModel 所做的更改。我创建了一个堆来插入所有文档,然后在我的堆数组上应用 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[]带有有序节点的 a。所以当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()但订购的那个。对此的任何帮助将不胜感激,谢谢。

4

1 回答 1

3

在 getValueAt() 方法中,您从 datos 对象中检索数据。

Documento doc = datos[rowIndex].getDocumento();

所以行数应该基于 datos 对象中的行数。

public int getRowCount() {
        //return heap.getNumNodos();
        return datos.length;
    }

getValueAt() 方法不应该对数据进行排序。模型中的数据应该已经排序。要么在外部对其进行排序,要么在创建模型时对其进行排序。那就是 getValueAt() 方法不应该改变数据的结构。此外,每次更改数据时,您都需要求助。

于 2013-10-31T19:19:39.437 回答