选中时,JTable复选框应启动计时器



我希望在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);
            }
    }

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

以下是一种方法的概述:

  • TableModel的实现中,管理一个List<Row>,其中每个Row包含一个用于复选框的Boolean和用于开始和停止时间的long值;根据需要使用System.currentTimeMillis()

  • CellEditor中的ItemListener中调节开始和停止时间。

  • 使用适当的格式将差异渲染为经过的时间。

  • javax.swing.TimerActionListener中,针对每个活动的Row周期性地调用模型中的setValueAt();侦听表应该自动更新。

这里显示了一个相关的示例。

最新更新