我試圖讓我的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