表模型更新+ fireTableDataChanged()会中断表选择

时间:2014-03-29 04:13:50

标签: java swing timer jtable

我有一个JTable跟踪一个人等待坐在餐厅的时间​​。我的问题是,每当秒,当计时器'滴答'时,行中的选择被删除。换句话说,如果你单击一行它会突出显示蓝色背景和轮廓,但是当计时器滴答时蓝色消失。

ActionListener actListner = new ActionListener() 
    {
        public void actionPerformed(ActionEvent event) 
        {
             aTable.updateTime();
        }
    };

    Timer timer = new Timer(1000, actListner);
    timer.start();

这是在主要课程

public void updateTime()
    {
        data.updateTime();
        fireTableDataChanged();
    }

这是表格模型

public void updateTime()
       {
            Date newTime = new Date();

            for (int i = 0; i < startTime.size(); i++)
            {                  
                this.setTimeWaiting(i, hoursMin.format(new Date(newTime.getTime() - startTime.get(i).getTime())));  
            }
       }

这是在数据模型中。

1 个答案:

答案 0 :(得分:4)

fireTableDataChanged()告诉表格数据可能以任何方式发生了变化,基本上您在整个数据集完全更改时使用它(例如,您已用新信息替换了所有以前的内容)。该表将从头开始重绘,也可以清除选择。

相反,使用更保守的fireTableCellUpdated(int,int)并指定由于时间变化而可能已被修改的每个单元格(可能是&#34;等待时间&#34;列中的所有内容)。

您还可以使用fireTableRowsUpdated(int,int)并指定一次调用中已更新的整个行范围,但通常最好坚持保守一方以尽量减少不必要的重绘。