当前位置: 首页 > 知识库问答 >
问题:

AbstractTableModel不会更新JTable

马权
2023-03-14

我试图让我的JTable显示对扩展AbstractTableModel的TableModel所做的更改。我创建了一个堆来插入所有文档,然后在我的堆数组上应用了一个堆排序,所以这个有序的数组应该是我的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()中的有序数组替换堆无序数组,并使用getdatos()返回该数组,但是JTable仍然不会显示出来,我还检查了heapsort()返回的数组,它工作得很好,数据与getdatos()中的数据相同,但是有序了。如有任何帮助,将不胜感激,谢谢。

共有1个答案

怀浩大
2023-03-14

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

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

因此,行计数应基于datos对象中的行数。

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

getValueAt()方法不应该对数据进行排序。应该已经对模型中的数据进行了排序。要么在外部对其进行排序,要么在创建模型时对其进行排序。也就是说,getValueAt()方法不应该改变数据的结构。而且,每次更改数据时,都需要调用。

 类似资料:
  • 问题内容: 我正在尝试将JProgressBar添加到我的程序中,但不会更新!仅当原因为100%时,该值才会更改。这是我的方法。 更改进度栏的值位于上述方法的底部。 这就是我所谓的方法。 编辑:以上根本不是问题,问题之一是程序正在使用整数除法而不是十进制。 问题答案: 是一个整数,也是。因此发生的是小数被截断。你应该做什么,就像 这样做是确保将其除以具有十进制功能的数据类型,该数据类型将返回更具包

  • 在我的片段中,我观察到db问卷列表字段: 在我的片段中,我有几个按钮,根据哪个按钮被按下,我在viewModel上调用方法,将设置为标签的字符串传递给按钮。 我的视图模式: 存储库方法: Dao方法: 当我按下按钮时,viewModel方法被调用,并带有参数,该参数应该用于通过搜索房间数据库来更新LiveData,但没有任何内容会被无缘无故地更新。数据库不是空的,所以没有理由在主片段中返回null

  • 我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon

  • 问题内容: 我目前正在使用基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新的推文推到我的客户端,服务在其中等待新的推文。当一条新的推文到来时,该服务通过$ broadcast发送事件。 在我的控制器中是一个事件侦听器,其中传入的tweet在单独的函数中进行处理。此功能只是将新的推文推入我的推文范围。 现在,我的问题

  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 问题内容: 我有一个问题要Ajax更新ui:repeat。更新是从ui:repeat外部的commandButton触发的(请参见下面的代码)。需要可变的 priceHour 来计算其他价格(周,Monat ..) 当我单击按钮时,什么也没有发生,并且ui:repeat和价格未更新。怎么了? 我也尝试过 更新“ myForm:alvs” , 更新“:myForm:alvs” :什么都没有! 我正在