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

Java 表格模型更新+fireTableDataChanged()会中断表格选择,java,swing,timer,jtable,Java,Swing,Timer,Jtable,我有一个JTable,它跟踪一个人在餐厅等待就座的时间。我的问题是,每秒钟,当计时器“滴答”一声时,一行上的选择就会被删除。换句话说,如果单击一行,它将以蓝色背景和轮廓高亮显示,但当计时器滴答作响时,蓝色将消失 ActionListener actListner = new ActionListener() { public void actionPerformed(ActionEvent event) { aTable.up

我有一个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())));  
            }
       }
这在数据模型中。

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

相反,请使用更保守的方法,并指定每个可能由于时间变化而被修改的单元格(假定为“等待时间”列中的所有内容)

您也可以使用并指定在一次调用中更新的整个行范围,但通常最好坚持保守的一面,以尽量减少不必要的重画。

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

相反,请使用更保守的方法,并指定每个可能由于时间变化而被修改的单元格(假定为“等待时间”列中的所有内容)

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