Java JTable复选框应在选中时启动计时器

Java JTable复选框应在选中时启动计时器,java,swing,timer,jtable,Java,Swing,Timer,Jtable,我希望在JTable中有一个列,用于计算表中布尔列为“true”的时间。它是复选框被选中的时间的计时器。我很难理解算法的所有机制 ActionListener actListner = new ActionListener() { public void actionPerformed(ActionEvent event) { System.out.println("k"); aTable.updateT

我希望在JTable中有一个列,用于计算表中布尔列为“true”的时间。它是复选框被选中的时间的计时器。我很难理解算法的所有机制

ActionListener actListner = new ActionListener() 
    {
        public void actionPerformed(ActionEvent event) 
        {
            System.out.println("k");
            aTable.updateTime();
        }
    };

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

    TableModelListener tableListener = new TableModelListener()
    {
        public void tableChanged(TableModelEvent e) 
        {
         int row = e.getFirstRow();
            int column = e.getColumn();
            TableModel model = (TableModel)e.getSource();
            String columnName = model.getColumnName(column);
            Object data = model.getValueAt(row, column);


            if (aTable.data.getVisible(row))
            {
                //aTable.data.setTimeVisible(row, date math);
            }
        }
    };
“updateTime()”函数用于跟踪行添加后存在的时间量,我也在考虑使用该函数(因为它每次都由计时器滴答声调用)来设置复选框选中的跟踪器的值,但我不确定

public void updateTime()
    {
        //data.updateTime();

        Date newTime = new Date();

            Integer time = null;
            System.out.println("updateTime");
            for (int i = 0; i < data.startTime.size(); i++)
            {
                time = Integer.parseInt(data.twoMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime())));
                //Date waiting = new Date(time);
                if (time >= 10)
                {
                    data.setTimeWaiting(i, data.twoMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime()))); 
                    System.out.println("2");
                }
                else if (time < 10)
                {
                    data.setTimeWaiting(i, (data.oneMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime()))));
                    System.out.println("1");
                }


                fireTableRowsUpdated(i,i);
            }

    }
public void updateTime()
{
//data.updateTime();
Date newTime=新日期();
整数时间=空;
System.out.println(“更新时间”);
对于(int i=0;i=10)
{
setTimeWaiting(i,data.twoMin.format(新日期(newTime.getTime()-data.startTime.get(i.getTime())));
系统输出打印项次(“2”);
}
否则如果(时间<10)
{
setTimeWaiting(i,(data.oneMin.format(新日期(newTime.getTime()-data.startTime.get(i.getTime()))));
系统输出打印项次(“1”);
}
耐火材料(i,i);
}
}

我是否需要传递一个包含开始时间位置的数组?这让我很困惑

以下是一种方法的概述:

  • 在的实现中,管理一个
    列表
    ,其中每个
    包含复选框的
    布尔值
    ,以及开始和停止时间的
    值;根据需要使用
    System.currentTimeMillis()

  • 在计算机中的
    ItemListener
    中调节启动和停止时间

  • 将差值作为使用的经过时间

  • 在的
    ActionListener
    中,定期在模型中为每个活动的
    行调用
    setValueAt()
    ;侦听表应自动更新


图中给出了一个相关示例。

A将导致更好的响应,并减少不调用fireTableRowsUpdated(i,i)的猜测;模型之外的方法回答得好,谢谢。还有一个问题:如何列出“行”?