getValueAt 在鼠标悬停在单元格上时调用

getValueAt called on mouse over cell

我注意到当我将光标移动到 table 的任何单元格上时,函数 'getValueAt' 被调用,并在 Eclipse 控制台中显示其输出。只是想知道为什么,不应该只在我创建 tableModel 对象时调用它吗?

我创建了一个 class,ModelloTabella 实现了 tableModel 和 这是 TableModel getValueAt 实现:

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    Studente tmp=arrayStudenti.get(rowIndex);
    if(columnIndex==0){
        System.out.println("Stampo da getValueAt Matricola");
        return tmp.getMatricola();
    }else if(columnIndex==1){
        System.out.println("Stampo da getValueAt Nome");
        return tmp.getNome();
    }else{
        System.out.println("Stampo da getValueAt Cognome");
        return tmp.getCognome();
    }

}

这是创建对象 'ModelloTabella' 的地方。我以为函数只在这里调用:

model = new ModelloTabella(this.controller.caricaStudenti(),controller);
            Tabella.setModel(model);

每当 table 需要呈现单元格(可能出于其他原因)时,JTable(通常)调用该方法,当您将鼠标悬停在单元格上时,实际上会触发tooltip 事件,JTable 首先获取单元格值,然后将此值传递给 CellRendererJTable 然后检查相应的 Component 以查看它是否具有 toolTipText值,如果有则显示,否则显示tables toolTipText

JTable 不会在内部缓存值,这就是模型的用途。因为相同的 CellRenderer 用于呈现给定列的所有单元格,所以也不可能缓存这些结果。因此,JTable 需要向模型询问一些信息